在C#中,我有一个自定义类Entity的数组。由于我创建的实体类型不同以及C#多态性的工作方式,我选择将不同的实体类型保留在一个实体数组中(即,我在实体数组中有Player实体,在Enemy实体中等等)。但是,在C++中,使用实体 vector ,当我声明一个唯一的实体(例如Player)时,它似乎丢失了其作为Player拥有的所有值,仅保留了其作为Entity拥有的那些值。这是我的疏忽,还是C++中的多态性规则不同?我怎样才能解决这个问题?

最佳答案

C++中的对象 slice

如果从子类实例中为其父类实例分配了,则有时也称为 slice 问题,由于该父类(super class)没有存储它们的位置,因此无法复制子类中定义的成员变量。仅当您按值传递对象时,才会发生这种情况。作为Kornel pointed out,解决此问题的方法是使用指向对象的指针 vector 。

有关更好的代码示例,请参见Wikipedia entry。更好的是SO thread,它详细解释了意外 slice 可能导致的细微错误。

关于c# - C#至C++多态性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16825218/

10-10 00:58