【问题标题】:C++ - Object-Oriented Array of base class [duplicate]C ++ - 基类的面向对象数组[重复]
【发布时间】:2012-07-01 23:34:41
【问题描述】:

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

我已将面向对象的类集成到我的 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

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

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

在循环之前计算delta

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

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

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

感谢您的宝贵时间。 :)

【问题讨论】:

    标签: c++ arrays oop opengl


    【解决方案1】:

    你遇到了slicing problem

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

    【讨论】:

    • 谢谢,如果我知道关键字切片就很容易找到答案。所以问题是通过使用Object 类型的指针数组来解决的,谢谢:)(再次简单回答哈哈)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2019-10-11
    • 1970-01-01
    • 2011-03-23
    • 2021-01-29
    相关资源
    最近更新 更多