菱形继承问题
A类有public了个int Age;
B类与C类都继承了A类
Son类分别继承了B类与C类
这是问题就出现了↓
声明一个函数,函数体是赋值父类B的Age,但是编译器报错(不明确)
意思就是编译器不知道你要给父类B.Age赋值还是给C.Age赋值?
这时你要用到一个virtual
(虚继承)关键字,而父类叫做虚基类
下面是代码演示↓
class PaiShengLei_A:virtual
public JiLei{};
class PaiShengLei_B:virtual
public JiLei{};
virtual
的原理是什么吗?
B类与C类共用1个指针地址(这样节省一个1个成员的所占字节大小)
而不加virtual
关键字:B、C类都是用的自己继承来的父类成员(并且会浪费1个成员的所占字节大小)
下面是全局的代码演示↓
#include<iostream>
#include<string>
using namespace std;
class JiLei
{
public :
int Age;
};
class PaiShengLei_A:virtual public JiLei
{
};
class PaiShengLei_B:virtual public JiLei
{
};
class WenTi:public PaiShengLei_A,public PaiShengLei_B
{
};
void test01()
{
WenTi w;
w.Age = 100;
cout << w.Age << endl;//打印100
cout << &w.PaiShengLei_A::Age << endl;
cout << &w.PaiShengLei_B::Age << endl;
}
int main()
{
test01();
return 0;
}