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

时间:2014-02-03 19:00:30

标签: c++

我对C ++很陌生,并试图找到一个好的模式来实现以下目标:

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

这看起来是否合理?如何存储不同类别的对象?我希望能够将变量定义为BaseClass myCurrentObject;,然后执行myCurrentObject = ChildClassA();myCurrentObject = ChildClassB();之类的操作,但它似乎并不那么简单!

1 个答案:

答案 0 :(得分:0)

你所描述的正是多态性,所以是的,这是合理的。

正如评论中提出的那样,您必须使用指针来引用对象,如

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对象的位置。因此,您应该意识到多态性需要可变数量的内存,而这只能在堆上运行。