我有一个类 Base1,它包含一个不同类 Base2 的对象数组。我想要一个派生类 Derived1,它继承了 Base1 的所有内容,除了数组是 Derived2 类型(它是 Base2 的派生类)。例如,像这样:
class Base2{
int a2;
};
class Derived2: public Base2{
int b2;
};
class Base1{
Base2* list;
};
class Derived1: public Base1{
Derived2* list;
};
我的理解是,在上面的示例中,Derived1 的对象实际上有两个数组:
list
和
Base1::list
我不想要。
想法是 Base1 的所有功能仍然适用于 Derived1 对象,因为 Derived2"is"Base2。这真的很脏,但我想我可以在 Derived1 构造函数中删除 [] Base1::list 数组。
有人看到这个问题的解决方案吗?这似乎是经常发生的事情,我不敢相信不存在简单的解决方案。使用模板有用吗?我的想法是否定的,因为 Base1 和 Derived1 中的所有功能都需要知道它们分别处理 Base2 和 Derived2 对象。
最佳答案
当有人将 Derived1
类向下转换为 Base1
时,您预计会发生什么?当你破坏基类后使用 list
时它会崩溃。最好的办法是继续使用基类的 list
,并确保只有 Derived2
类型的对象被放入列表中。如果无法从外部修改列表的内容,那将是可行且安全的。
是的,我知道关于这个还有很多要说的,但让我们一步一步来吧。
关于C++ 在派生类中更改成员类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6512826/