【发布时间】:2017-01-24 08:59:40
【问题描述】:
假设我有一个有多个类的应用程序(使用继承) 现在有一天,我必须向我的应用程序添加新规范,这需要我使用多重继承。
例如这段代码:
class A{};
class B : public A{};
class C : public A{};
现在我的新功能需要我这样做:
class D{} : public B,public C{};
但这会导致钻石问题。
所以我的问题是,如何克服这个问题: 1)作为最佳实践,我将对所有类使用虚拟继承,假设我将来可能需要使用多重继承? 或者 2) 我将简单地更改我的代码,在需要时将我的基类设为虚拟?
【问题讨论】:
-
您的 Y 继承不是问题。你需要以
A威胁D吗? -
虚拟继承有一些强约束,特别是对于整个层次结构中所需的构造函数。
-
你看到了吗(stackoverflow.com/a/407928/2721583)?您可以修改代码以使用接口而不是具体的基类。
-
不存在“钻石问题”。
-
钻石继承有问题吗?你能写成:
class A {...}; class CMixin {...}; class C: public A, public CMixin {}; class D : public B, public CMixin {};吗?这里有很多选择。
标签: c++ multiple-inheritance virtual-inheritance diamond-problem