【发布时间】:2011-09-24 15:57:00
【问题描述】:
我有一个类 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“是”Base2。这真的很脏,但我想我可以在 Derived1 构造函数中删除 [] Base1::list 数组。
有没有人看到这个问题的解决方案?这似乎是经常发生的事情,我无法相信一个简单的解决方案不存在。使用模板会起作用吗?我的想法是否定的,因为 Base1 和 Derived1 中的所有功能都需要知道它们分别处理的是 Base2 和 Derived2 对象。
【问题讨论】:
-
你应该使用模板而不是继承,IMO
-
@onof:从问题来看,现在开始讨论模板还为时过早。
-
A
Derived2是Base2,但Derived2的 数组 不是Base2的数组,如果Derived1尝试使用 @ 987654329@ 依赖于Base2*指针运算的方法,你会遇到问题。 (顺便说一下,糟糕的名字。) -
如果这按您希望的方式工作,并且您有一个 Derived1 并在其上调用了一个 Base1 方法,那么从 Base1 的角度来看,将 anything 派生自 Base2 是完全有效的在数组中,即使数组本身只能存储指向 Derived2 的指针。
-
@Carl:问题是为什么
Derived1关心它是list中的Derived2*s 而不是Base2*s?如果您使用继承正确,list可以是Base2*类型并包含Derived2*的实例,并且您需要从Derived2获得的任何特殊行为都可以通过调用定义的虚拟成员函数来访问在Base2中,随后在Derived2中被覆盖。
标签: c++ inheritance overloading