我对C ++很陌生,并试图找到一个好的模式来实现以下目标:
这看起来是否合理?如何存储不同类别的对象?我希望能够将变量定义为BaseClass myCurrentObject;
,然后执行myCurrentObject = ChildClassA();
或myCurrentObject = ChildClassB();
之类的操作,但它似乎并不那么简单!
答案 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
对象的位置。因此,您应该意识到多态性需要可变数量的内存,而这只能在堆上运行。