【虚基类】

来源:百度知道 编辑:UC知道 时间:2024/05/25 03:20:41
//虚基类的例子
#include<iostream>
using namespace std;
class A
{
protected:
int x;
public:
A(int a=0)
{x=a;}
};
class B:virtual public A //注意定义格式
{
protected:
int y;
public:
B(int a=0,int b=0):A(a)
{y=b;}
};
class C: public virtual A //注意定义格式
{
protected:
int z;
public:
C(int a=0,int c=0):A(a)
{z=c;}
};
class D: public B,public C
{
protected:
int k;
public:
D(int a1=0,int a2=0,int b=0,int c=0,int d=0):B(a1,b),C(a2,c) //①
//D(int a1=0,int a2=0,int b=0,int c=0,int d=0):B(a1,b),C(a2,c),A(a1) //②
{k=d;}
void Show()
{
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
cout<<"z="<<z<<endl;
cout<<"k=&quo

/*
①行调用了基类的构造函数,在B类和C类的构造函数A(a1,b)和A(a2,c)又
分别调用了A类的构造函数,此时编译器无法确定由B还是C的构造函数来调
用A类的构造函数,在这种情况下,即使a1和a2的值相同,C++仍然约定调
用A类的缺省构造函数,所以输出x=0。当然也可以直接调用的构造函数,如
②行,则结果为x=1。
*/