C ++ - 面向对象的基类数组

时间:2012-07-01 23:34:41

标签: c++ arrays oop opengl

  

可能重复:
  Learning C++: polymorphism and slicing
  Array of polymorphic base class objects initialized with child class objects

我已将面向对象的类集成到我的OpenGL应用程序中。基类有一个名为Tick的函数,应该使用表示增量时间的参数调用每个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

然后调用tick函数,我通过数组迭代:

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

在循环之前计算delta

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

我甚至尝试过类型转换(每个类都有一个字符串来标识它的类型),但没有用。

我很确定答案显而易见(就像我上一期的答案一样),但我找不到答案。

感谢您的时间。 :)

1 个答案:

答案 0 :(得分:5)

您遇到了slicing problem

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