0

可能重复:
学习 C++:多态性和切片
用子类对象初始化的多态基类对象数组

我已将面向对象的类集成到我的 OpenGL 应用程序中。基类有一个调用的函数Tick,应该在每个刻度(很明显)调用一个表示增量时间的参数。这是它的样子(没有与这个问题无关的东西)。

标题:

class Object
{
public:
    virtual void Tick(float DeltaTime);
}
class Controller : public Object
{
public:
    virtual void Tick(float DeltaTime);
}

然后我有一个名为的类Engine,其中包含主循环、初始化和处置(将其与窗口创建分开)。
在那个类中,我需要跟踪游戏中的所有对象,所以我创建了一个数组:
Object* Objects = new Object[10]; // for now max 10 objects

然后调用我遍历数组的刻度函数:

for (unsigned int c = 0; c < 10; c++)
    Objects[c].Tick(delta);

delta循环之前计算。

问题是,如果我将数组中的一个对象分配给Controller(例如)调用的 Tick 函数始终是实际存储的类中的对象,Object而不是实际存储的类中的对象。

我什至尝试过类型转换(每个类都有一个字符串来标识它的类型),但无济于事。

我很确定答案是显而易见的(就像我最后一个问题的答案),但我找不到答案。

感谢您的时间。:)

4

1 回答 1

5

您遇到了切片问题

解决方案是不要将多态对象按值存储在数组中;改用(智能)指针。

于 2012-07-01T23:39:18.970 回答