本文属学习笔记,如有错误,欢迎拍砖!
在上一篇《C++和Java的多继承》中我们说到了c++多继承中如果子类D的父类中有两个或两个以上(如父类B,C)又继承自一个类(如A,那么在子类D中访问继承得来的属性(如A类的一些属性)就会出现歧义。上一篇讲的是用作用域访问符来处理这个问题,现在我们要用虚基类来搞定它.
首先我们要知道什么是虚基类:虚基类的基本原则是在内存中只有基类成员的一份拷贝。不止一次地通过多个路径继承类在内存中创建了基类成员的多份拷贝,这样通过把基类继承声明为虚拟的,只继承基类的一份拷贝。那么就要用到virtual限定符把基类继承说明为虚拟的。我们可以把上一篇的程序修改一下得到下面的程序:
#include<iostream>
using namespace std;
class A{
public:
int iVarA;
};
class B:virtual public A{//注意这里
public:
int iVarB;
};
class C:virtual public A{
public :
int iVarC;
};
class D:public B,public C{
public:
int iVarD;
};
int main(){
D Dtemp;
Dtemp.iVarA = 10;
return 0;
}