我在 C# 中有一个自定义类实体的数组。由于我创建的实体类型不同以及 C# 多态性的工作方式,我选择将不同的实体类型保留在一个实体数组中(即我在实体数组中有 Player 实体、Enemy 实体等)。但是,在 C++ 中,使用实体 vector ,当我声明一个独特的实体(例如玩家)时,它似乎失去了它作为玩家所具有的所有值,仅保留它作为实体所具有的值。这是我的疏忽,还是 C++ 中的多态性规则不同?我该如何解决这个问题?
最佳答案
C++ 中的对象切片
有时也称为切片问题,如果父类(super class)实例从子类实例中分配其值,则无法复制子类中定义的成员变量,因为父类(super class)没有地方存储它们.只有当您按值传递对象时才会发生这种情况。作为内核pointed out ,解决此问题的一种方法是使用指向对象的指针 vector 。
参见 Wikipedia entry一个很好的代码示例。更好的是这个SO thread , 更详细地解释了意外切片可能导致的细微错误
关于C# 到 C++ 多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825218/