/*
二义性:
使用作用域限定符::来标识不同基类的成员的唯一性,防止二义性产生
*/
#include <iostream>
class D
{
public:
int n;
D(int newN=100)//构造函数
{
n=newN;
}
};
class B:public D
{
public:
int nb;
B(int newN=100,int newM=100):D(newN)
{
nb=newM;
}
void output()
{
std::cout<<"B::n="<<B::n<<std::endl;
}
};
class C:public D
{
public:
int nc;
C(int newN=100,int newM=100):D(newN){ nc =newM; }
void output()
{
std::cout<<"C::n="<<C::n<<std::endl;
}
};
class A:public B,public C//由B、C派生A
{
public:
int na;
A(int a,int b,int c,int d,int e):B(a,b),C(c,d){na=e;}
void output()
{
std::cout<<"nb="<<nb<<",nc="<<nc<<",na="<<na<<std::endl;
}
};
int main(int argc, const char * argv[])
{
A myA(10,20,30,40,50);
myA.B::output();
myA.C::output();
myA.output();
/*输出结果
B::n=10
C::n=30
nb=20,nc=40,na=50
*/
return 0;
}