#include<iostream>
#include<string>
using namespace std;
class Animal{
public:
//动物类
int m_Age;
};
class Sheep:virtual public Animal
{
//羊类
};
class Tuo:virtual public Animal
{
//驼类
};
//多继承语法 class 子类名 :继承方式 父类名1,继承方式 父类名2
class SheepTuo :public Sheep, public Tuo {
public:
};
void test()
{
SheepTuo st;
st.m_Age = 11;
st.Sheep::m_Age = 22;
st.Tuo::m_Age = 33;
cout<<"st.sheep m_age= " << st.Sheep::m_Age << endl;
cout <<"st.tuo m_age= " << st.Tuo::m_Age << endl;
cout <<"st.m_age= " << st.m_Age << endl;
//若第9,13行代码不加virtual,这行会报错
//加了后变为虚继承
//Animal变为虚基类
//虚继承,会将m_Age,变成一份,共用的数据,所以经过第3次赋值后所有输出变33(27行代码)
}
int main()
{
test();
}
底层原理:
现在继承的不是两份数据,而是两个指针,两个指针加上偏移量,会找到唯一的数据
复习请看,哔站黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难
p134 13:45处开始