我对C++还比较新,继承让我很困惑。 我知道在C#中这很好用,因为我总是使用Base.();
我希望能够调用一个PlayerCharacter的向量数组,它派生自Entity。 目前当我调用它时,它只调用Entity的update方法。
int main()
{
vector<Entity*> list;
list.push_back(&PlayerCharacter());
for(int i = 0; i < list.size(); i++)
{
list[0]->Update();
}
}
class Entity
{
public:
Entity(void);
~Entity(void);
int hitpoints;
virtual void Update(void);
};
void Entity::Update(void)
{
int a = 0;
a++;
}
class PlayerCharacter : public Entity
{
public:
PlayerCharacter(void);
~PlayerCharacter(void);
bool Move();
void Update() override;
};
void PlayerCharacter::Update(void)
{
int a = 0;
a--;
}
PlayerCharacter::Update()
内使用Entity::Update()
。在C++中,一个类可以有几个非抽象的基类(不像C#),因此需要显式标识基类来访问基类成员。 - Grimm The OpinerEntity::Update
吗? - Chris Mantlepush_back
语句:list.push_back(new PlayerCharacter());
记住,你需要删除向量中的项目以避免内存泄漏。此外,list
是STL中的一个类名,所以为了避免混淆,可以将vector
的实例命名为其他名称,比如我建议用vec
。 - Grimm The Opinerlist.push_back(&PlayerCharacter());
将一个指向即将被销毁的临时对象的指针推入列表中,因此向量中的指针立即变为无效。 - Michael Burr