概念:
如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性
示例
#include<iostream>
using namespace std;
class Parent
{
public:
Parent(int a)
{
this->a = a;
cout<<"Parent 构造函数被调用"<<endl;
}
public:
int a;
};
class Parent1:public Parent
{
public:
Parent1(int b):Parent(1)
{
this->b = b;
cout<<"Parent1 构造函数被调用"<<endl;
}
void print1()
{
cout<<"b = "<<b<<endl;
}
public:
int b;
};
class Parent2:public Parent
{
public:
Parent2(int d):Parent(2)
{
this->d = d;
cout<<"Parent2 的构造函数被调用"<<endl;
}
void print2()
{
cout<<"d = "<<d<<endl;
}
public:
int d;
};
class C:public Parent1,public Parent2
{
public:
C(int e):Parent1(3),Parent2(4)
{
this->e = e;
cout<<"C 构造函数被调用"<<endl;
}
void printC()
{
cout<<"e = "<<e<<endl;
}
private:
int e;
};
int main()
{
C c(10);
//c.a = 0; error C2385: 对“a”的访问不明确
c.Parent1::a = 10;
return 0;
}
执行结果:
Parent 构造函数被调用
Parent1 构造函数被调用
Parent 构造函数被调用
Parent2 的构造函数被调用
C 构造函数被调用