1. c++多继承问题1
#include <iostream>
using namespace std;
class B
{
public:
int b;
protected:
private:
};
class B1 : virtual public B
{
public:
int b1;
};
class B2 : virtual public B
{
public:
int b2;
};
class C : public B1, public B2
{
public:
int c;
};
void main()
{
C c1;
c1.b1 = 100;
c1.b2 = 200;
c1.c = 300;
/* 问题:
当B1、B2分别继承来自B,然后C继承 B1、B2,那么C继承B的属性不知道是来自B1还是B2,继承的二义性
解决方法:使用虚继承 在B1 前面 添加virtual 关键字
内部实现:c++编译器只调用一次B的构造函数
*/
c1.b = 500; //继承的二义性 和 虚继承解决方案
// 这种写法:子类访问父类然后访问父类属性
//c1.B1::b = 500;
//c1.B2::b = 500;
cout<<"hello..."<<endl;
system("pause");
return ;
}
2. c++ 多继承问题2
class D1
{
public:
int k;
protected:
private:
};
class D2
{
public:
int k;
protected:
private:
};
class E : public D1, public D2
{
public:
protected:
private:
};
void main1202()
{
// e1.k //出错c++编译器不知道访问D1还是D2属性
E e1;
// 只能通过这种方式来进行访问
e1.D1::k = 100;
e1.D2::k = 200;
system("pause");
}