二义性:就是指取值不明确,比如下面例子中的D3同时继承与父类D1,D2。而两个父类当中都有成员变量k.此时如果想要用D3的对象,访问父类的成员变量K,则需要加上相应的域名才能访问。并且只有在继承方式为公有的情况下才可以访问。
如果继承方式忘了写,就算加上域名也访问不了。因为类的默认继承方式为保护类型。二此种继承方式下,派生类对象无法访问基类的任何成员。
#include <iostream>
using namespace std;
class D1
{
public:
D1(int k)
{
this->k = k;
cout << "D1 cunstruct " << this->k << endl;
}
int k;
};
class D2
{
public:
D2(int k)
{
this->k = k;
cout << "D2 cunstruct " << this->k << endl;
}
int k;
};
class D3 : public D1, public D2 // 如果不写继承方式则默认为保护类型
{
public:
D3(int k, int k1) :D1(k), D2(k1)
{
cout << "D3 cunstruct " << endl;
}
private:
};
void main()
{
D3 d3(20, 30);
d3.D2::k = 100;
cout << d3.D2::k << endl; //如果不加域名则访问不明确
getchar();
}