引言
在本篇文章中,我们将深入探讨C++在游戏开发中的应用,包括内存管理、面向对象编程(OOP)、模板使用等,并通过实际代码示例来帮助理解。
内存管理与智能指针
cpp
深色版本
#include <iostream>
#include <memory> // For smart pointers
class GameObject {
public:
GameObject() { std::cout << "GameObject created\n"; }
~GameObject() { std::cout << "GameObject destroyed\n"; }
void update() { std::cout << "Updating game object\n"; }
};
int main() {
// 使用智能指针管理GameObject的生命周期
std::unique_ptr<GameObject> gameObject = std::make_unique<GameObject>();
gameObject->update();
// 当gameObject超出作用域时,自动调用析构函数释放资源
}
注释:
std::unique_ptr
提供了独占的所有权语义。当指向的对象不再需要时,它会自动删除该对象。- 有效避免了内存泄漏问题,同时简化了内存管理。
面向对象编程(OOP)
cpp
深色版本
class Character {
protected:
int health;
public:
Character(int h) : health(h) {}
virtual void attack(Character& enemy) = 0; // 纯虚函数,定义接口但不实现
int getHealth() const { return health; }
void setHealth(int h) { health = h; }
};
class Warrior : public Character {
public:
Warrior() : Character(100) {} // 默认构造函数,初始化战士的生命值为100
void attack(Character& enemy) override {
std::cout << "Warrior attacks!\n";
enemy.setHealth(enemy.getHealth() - 10);
}
};
注释:
Character
类作为一个基类,定义了一个抽象方法attack
,具体实现由派生类完成。Warrior
类继承自Character
并实现了attack
方法,展示了多态性如何允许不同类型的角色执行相同的操作。
模板与泛型编程
cpp
深色版本
template<typename T>
class Container {
private:
T* items;
int capacity;
public:
Container(int size) : capacity(size), items(new T[size]) {}
~Container() { delete[] items; }
T& operator[](int index) { return items[index]; }
};
int main() {
Container<int> intContainer(5); // 创建一个整数容器
for (int i = 0; i < 5; ++i) {
intContainer[i] = i * 2; // 初始化容器元素
}
for (int i = 0; i < 5; ++i) {
std::cout << intContainer[i] << std::endl; // 输出容器元素
}
}
注释:
Container
是一个通用的容器类模板,可以存储任何类型的数据。- 利用模板特性,我们可以编写更通用和复用性更高的代码。