如何将具有不同类(但相同基础)的对象存储在一个变量中

How to store objects with varying classes (but the same base) in a single variable

本文关键字:存储 对象 变量 一个 同类      更新时间:2023-10-16

我是C 的新手,并试图找到一个良好的模式:

  • 一个定义多个(虚拟?)功能和属性的基类。
  • 几个从此基类继承并覆盖某些或全部虚拟函数并使用父属性的不同类别。
  • 然后,我的计划是拥有一个可以存储任何一个类并在基本一个中定义的呼叫函数的单个变量。有时我会在此变量中将对象换成其他一个。

这似乎是明智的,我如何存储像这样不同类的对象?我希望能够将变量定义为BaseClass myCurrentObject;,然后执行myCurrentObject = ChildClassA();myCurrentObject = ChildClassB();等的操作,但似乎并不那么简单!

您描述的完全是多态性的,所以是的,这是合理的。

评论中提出的,您必须使用指示来引用对象,如

BaseClass* obj = new ChildClassA();
obj->call_some_virtual_function(); 
  // ^ Will call the most derived definition of the function

当然,如果您正在编写任何严肃的程序,则不应在这里使用普通指针。他们简单地使您很可能会更早或后者忘记删除obj指向的旧对象,然后再为其分配新对象。但是,由于您说您是C 的新手,并且可能只想尝试一下,因此上述可以很好。

它不能像简单地编写BaseClass obj = ChildClassA();那样容易的原因是,这将obj定义为BaseClass类型的对象。但是,由于ChildClassA的成员可能比BaseClass多,因此您无法将ChildClassA存储在仅用于BaseClass对象的位置。因此,您应该意识到多态性需要可变的内存,这只能在堆上。