C# 到 C++ 多态性

标签 c# c++ inheritance polymorphism

我在 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/

相关文章:

c++ - 在opengl中获取相机位置

c++ - 当我在 Visual C++ 中 sleep (1000)时出错,使 srand()工作

c++ - 将python编译成共享库

java - 重写 toString() 是否会导致与重写普通方法不同的行为?

c# - 我得到统一的错误CS1061(您是否缺少using指令或程序集引用?)

c# - 如何知道我的日历是否在 CalendarEntry 中公开共享

c# - 是否可以从 Stripe API 获取计划的订阅者数量?

c++ - "import"从基类定义一个函数来实现抽象接口(interface)(C++中的多重继承)

c++ - 继承非默认

c# - 在启动时选择列表中的第一个 ComboBox 项