NDe*_*iny 3 c++ multiple-inheritance
我有2个基类(B1和B2),它们是从公共基类(B)派生出来的,它们有一个公共变量(let:int x;来自基数B),在第一个基数中x=0,在第二个基数中x=10(默认值在B1中给出, B2构造函数).
视觉:
class B
{
int x;
protected:
B(int x) : x{x}{}
};
class B1 : public B
{
protected:
B1() : B(0){}
};
class B2 : public B
{
protected:
B2() : B(10){}
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我再推导一个类:
class D : virtual public B1, virtual public B2
{
public:
D() : B1{}, B2{}{}
};
Run Code Online (Sandbox Code Playgroud)
这里只有一个x的副本可用于虚拟概念,现在如果我尝试使用派生类对象访问x值,那么x的实例将在O/p(x=0或x=10)中得到,为什么?
为了使用虚拟继承,基地B必须声明为在两个虚拟B1和B2.没有它,你有B的非虚拟继承.
如果您有非虚继承,那么你有两个B在基地D,所以你不能访问x中D没有限定它作为B1::x或B2::x
如果你有虚拟继承,那么你只有一个B和一个x,所以对它的两个赋值(x=0和x=10)将以你执行它们的顺序发生,而后者中的任何一个将覆盖前一个的设置值(多为带有x两个赋值的简单变量).
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |