【发布时间】:2013-12-04 10:35:36
【问题描述】:
我对 C++ 还很陌生,继承让我陷入了困境。 我知道这在 C# 中有效,因为我一直在使用 Base.();
我希望能够调用从 Entity 派生的 PlayerCharacter 向量数组。 目前我调用它时,它只调用Entity的更新方法。
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# 不同),因此您需要显式标识基类才能访问基类成员。 -
你确定是
Entity::Update被调用的吗? -
天哪,你正在将一个指向临时变量的指针推入向量中!将您的
push_back行替换为:list.push_back( new PlayerCharacter() );并记住 - 您需要delete向量中的项目以避免内存泄漏。另外,list是 STL 中的一个类名,因此称为vector的实例,我可以建议vec吗? -
list.push_back(&PlayerCharacter());正在将一个指针推送到一个立即被销毁的临时对象,因此向量中的指针立即无效。 -
可能是一个愚蠢的问题,但从该代码示例中,我看不出您如何判断实际执行的是哪个方法。在这两种情况下,您都在分配一个局部变量,您使用 ++ 或 --,然后立即丢弃它。您如何观察结果?
标签: c++ function inheritance vector