C++多重继承(菱形方案)范式
我在多重继承菱形方案下组织了4个类C++多重继承(菱形方案)范式,c++,multiple-inheritance,C++,Multiple Inheritance,我在多重继承菱形方案下组织了4个类 BASE / \ / \ Deriv1 Deriv2 \ / \ / Final 例如,我对每个类都有ShowXXXX方法,其中“XXXX”是类的名称 当我调用ob.ShowFinal方法时,它会打印: 期末考试的字段, Deriv1的字段, 基地的田地, Deriv2的字段
BASE
/ \
/ \
Deriv1 Deriv2
\ /
\ /
Final
例如,我对每个类都有ShowXXXX方法,其中“XXXX”是类的名称
当我调用ob.ShowFinal方法时,它会打印:
期末考试的字段,
Deriv1的字段,
基地的田地,
Deriv2的字段,
基地场
问题是我想第二次逃离打印基地的字段。
但是,有一个范例:因为当我调用ob.ShowDeriv2时,它应该被打印出来:
Deriv2的字段,
基地场
当我调用ob.ShowDeriv1时,应该打印:
Deriv1的字段,
基地场
我的代码:
谢谢你的帮助 在您的问题中几乎没有限制,因此这应该是可行的 将中间层1和2中的声明更改为
public:
void ShowIntermediate1(bool printBase = true);
在实施过程中:
...
if (printBase)
ShowBase();
然后在ShowFinal中:
也许你想要的答案是。这是为了解决这个问题。但是您应该将代码更改为使用虚拟方法。您可以使用虚拟继承来确保Final只获取一个基本子对象,而非虚拟继承情况下仅获取两个基本子对象。但是虚拟继承确实有成本——它增加了Deriv1和Deriv2子对象的大小,而且使用起来有些复杂。我忍不住想,但你的设计有一个更根本的问题。你到底想做什么?所有的Show*方法都是用来调试的吗?它闻起来有点像你在使用继承,而你应该使用组合。你能解释一下你想用这个代码解决什么问题吗?我应该做一项由我的教授在实验室培训课程上提出的工作。这是一个简单的例子,他说尝试在菱形下进行多重继承form@Insilico而且使用起来有点复杂。什么样的并发症?
...
if (printBase)
ShowBase();
ShowIntermediate1(true);
ShowIntermediate2(false);