#include <iostream>using namespace std;
class B
{
public:
B(int _b = 10)
{}
int _b;
};
class C1:public B
{
public:
C1(int _c1 = 20)
{}
int _c1;
};
class C2:public B
{
public:
C2(int _c2 = 30)
{}
int _c2;
};
class D :public C1, public C2
{
public:
D(int _d = 40)
{}
int _d;
};
int main()
{
D d;
d._b;//访问B类继承下来的_b数据
system("pause");
return0;
}
这时编译器会为我们报错如下:
我们很清楚这个继承模型如下:
很明显,编译器不知道我们要访问的_b是从C1继承下来还是从C2继承下来,因此报错。
为了解决这种访问不明确错误
1、加作用域限定符:
将上代码稍加改造:
int main()
{
D d;
cout << sizeof(d) << endl;
d.C1::_b;system("pause");
return 0;
}
#include <iostream>usingnamespacestd;
class B
{
public:
int _b;
};
class C1:virtualpublic B
{
public:
int _c1;
};
class C2:virtualpublic B
{
public:
int _c2;
};
class D :public C1, public C2
{
public:
int _d;
};
int main()
{
D d;
d._b = 1;
d._c1 = 2;
d._c2 = 3;
d._d = 4;
cout << sizeof(d) << endl;
system("pause");
return0;
}