如何将具有不同类(但相同基础)的对象存储在一个变量中
How to store objects with varying classes (but the same base) in a single variable
我是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
对象的位置。因此,您应该意识到多态性需要可变的内存,这只能在堆上。
相关文章:
- 如何使用 stl 容器有效地存储对象?(即根据其字段的值进行搜索)
- 线程上下文上的静态存储对象优化
- OOP - 存储对象和服务接口
- 为什么存储对象地址在缓冲区中会导致内存泄漏并删除它们
- 是否保证在销毁所有线程本地存储对象后销毁全局对象
- 使用列表存储对象
- 在c++中存储一个对象或不存储对象的首选方式是什么
- 更好的是:存储对象与存储指针
- 应用程序使用QMAP存储对象时停止响应
- 使用堆栈存储对象
- 如何在 std::map 中存储"对象类型"?
- 我应该如何存储对象
- 在 c++ 中存储对象的最佳策略是什么,确保名称唯一并能够在以后有效地检索它们
- 用于存储对象列表的最佳标准类
- 在C++中存储对象地址的数据结构
- 函子如何维护/存储对象的状态
- 我如何定义一个向量,并用C++在其中存储对象
- 存储对象以备将来使用(在重新启动程序时)
- C++/JNI-存储对象(jobject)在向量和数组中发生意外更改,C++或JNI问题
- 在多个容器中存储对象的最佳实践