C++基础之类的虚继承
一、多重继承:很少用,现代高级语言弃用多继承
1、基本语法:class D:public A,private B,protected C
{类D新增加的成员}
2、二义性:A类中有成员a,B类中有成员a,D类继承过来以后,a会出现二义性问题。
解决办法:1>对于重名情况,添加作用域,c.a=100;c.A::a=100;(这种写法)
2>对与基类中的成员由多份存储变为单一存储,虚继承。
二、虚继承
1、为什么需要虚继承?(虚基类的作用)
在一个类中保留间接共同基类的多份同名成员, 这种现象是人们不希望出现的。C++提供虚基类(virtual base class)的方法, 使得在继承间接共同基类时只保留一份成员。
2、虚基类(虚继承)使用:
Class D;
Class A:public virtual D;
Class B:public virtual D;
Class C:public A,public B;
类C的构造函数为:C(int a,int b,int c,int d):D(d),A(a),B(b),c(c)
{
}
在最后的派生类中不仅要负责对其直接基类进行初始化,还要负责对虚基类初始化。
C++编译系统只执行最后的派生类对虚基类的构造函数的调用,而忽略虚基类的其他派生类(如类B和类C) 对虚基类的构造函数的调用,这就保证了虚基类的数据成员不会被多次初始化。