#include<iostream>
using namespace std;
//普通实现页面
//
////java页面
//class Java
//{
//public:
// void header()
// {
// cout << "首页、公开课、登录、注册...(公共头部)" << endl;
// }
// void footer()
// {
// cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
// }
// void left()
// {
// cout << "Java、C++、Python...(公共分类列表)" << endl;
// }
// void content()
// {
// cout << "Java 学科视频" << endl;
// }
//};
//
////Python页面
//class Python
//{
//public:
// void header()
// {
// cout << "首页、公开课、登录、注册...(公共头部)" << endl;
// }
// void footer()
// {
// cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
// }
// void left()
// {
// cout << "Java、C++、Python...(公共分类列表)" << endl;
// }
// void content()
// {
// cout << "Python 学科视频" << endl;
// }
//};
//
////C++页面
//class CPP
//{
//public:
// void header()
// {
// cout << "首页、公开课、登录、注册...(公共头部)" << endl;
// }
// void footer()
// {
// cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
// }
// void left()
// {
// cout << "Java、C++、Python...(公共分类列表)" << endl;
// }
// void content()
// {
// cout << "C++ 学科视频" << endl;
// }
//};
//
//void test14()
//{
// cout << "Java下载视频页面如下:" << endl;
// Java ja;
// ja.header();
// ja.footer();
// ja.left();
// ja.content();
// cout << "-------------------------------" << endl;
// cout << "Python下载视频页面如下:" << endl;
// Python py;
// py.header();
// py.footer();
// py.left();
// py.content();
// cout << "-------------------------------" << endl;
// cout << "C++下载视频页面如下:" << endl;
// CPP c;
// c.header();
// c.footer();
// c.left();
// c.content();
//}
////继承实现页面
//class Basepage
//{
//public:
// void header()
// {
// cout << "首页、公开课、登录、注册...(公共头部)" << endl;
// }
// void footer()
// {
// cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
// }
// void left()
// {
// cout << "Java、C++、Python...(公共分类列表)" << endl;
// }
//};
////Java页面
//class Java :public Basepage
//{
//public:
// void content()
// {
// cout << "Java 学科视频" << endl;
// }
//};
////Python页面
//class Python :public Basepage
//{
//public:
// void content()
// {
// cout << "Python 学科视频" << endl;
// }
//};
////C++页面
//class CPP :public Basepage
//{
//public:
// void content()
// {
// cout << "CPP 学科视频" << endl;
// }
//};
//void test14()
//{
// cout << "Java下载视频页面如下:" << endl;
// Java ja;
// ja.header();
// ja.footer();
// ja.left();
// ja.content();
// cout << "-------------------------------" << endl;
// cout << "Python下载视频页面如下:" << endl;
// Python py;
// py.header();
// py.footer();
// py.left();
// py.content();
// cout << "-------------------------------" << endl;
// cout << "C++下载视频页面如下:" << endl;
// CPP c;
// c.header();
// c.footer();
// c.left();
// c.content();
//}
////继承方式
////公共继承
//class Base1
//{
//public:
// int m_a;
//protected:
// int m_b;
//private:
// int m_c;
//};
//class Son1 :public Base1
//{
// void func()
// {
// m_a = 10; //父类中公共权限成员 子类中也公共
// m_b = 20; //父类中保护权限成员 子类中也保护
// //m_c = 30; //父类中私有权限成员 子类不能访问
// }
//};
//
////保护继承
//class Base2
//{
//public:
// int m_a;
//protected:
// int m_b;
//private:
// int m_c;
//};
//class Son2 :protected Base2
//{
// void func()
// {
// m_a = 10; //父类中公共权限成员 子类中也公共
// m_b = 20; //父类中保护权限成员 子类中也保护
// //m_c = 30; //父类中私有权限成员 子类不能访问
// }
//};
////私有继承
//class Base3
//{
//public:
// int m_a;
//protected:
// int m_b;
//private:
// int m_c;
//};
//class Son3 :private Base3
//{
// void func()
// {
// m_a = 10; //父类中公共权限成员 子类中也公共
// m_b = 20; //父类中保护权限成员 子类中也保护
// //m_c = 30; //父类中私有权限成员 子类不能访问
// }
//};
//void test14()
//{
// Son1 s1;
// s1.m_a = 100;
// //s1.m_b = 100; //Son1 中m_b是保护权限 类外访问不到
//
// Son2 s2;
// //s2.m_a = 100; //Son2 是保护权限 类外访问不到
//
// Son3 s3;
// //s3.m_a; //Son3 是私有权限 类外访问不到
//}
////继承中的对象模型
//class Base
//{
//public:
// int m_a;
//protected:
// int m_b;
//private:
// int m_c;
//};
//class Son :public Base
//{
//public:
// int m_p;
//};
//void test14()
//{
// //父类中所有非静态成员属性都会被子类继承下去
// //父类中私有的成员属性被编译器隐藏 但依旧继承下去了
// cout << "sizeof Son=" << sizeof(Son) << endl; //16
//}
////继承中的构造和析构的顺序
//class Base
//{
//public:
// Base()
// {
// cout << "Base构造函数!" << endl;
// }
// ~Base()
// {
// cout << "Base析构函数!" << endl;
// }
//};
//class Son :public Base
//{
//public:
// Son()
// {
// cout << "Son构造函数!" << endl;
// }
// ~Son()
// {
// cout << "Son析构函数!" << endl;
// }
//};
//void test14()
//{
// //Base b;
// Son s;
//}
////继承中同名成员处理
//class Base
//{
//public:
// Base()
// {
// m_a = 100;
// }
// void func()
// {
// cout << "Base - func()调用" << endl;
// }
// int m_a;
//};
//class Son :public Base
//{
//public:
// Son()
// {
// m_a = 200;
// }
// void func()
// {
// cout << "Son - func()调用" << endl;
// }
// int m_a;
//};
//void test14()
//{
// Son s;
// cout << "Son 下 m_a= " << s.m_a << endl;
// //如果通过子类对象 访问父类同名成员 需要加作用域
// cout << "Base 下 m_a= " << s.Base::m_a << endl;
//}
////同名成员函数处理
//void test15()
//{
// Son s;
// s.func(); //直接调用 调用的是子类中的同名成员
// s.Base::func();
//}
//菱形继承
//动物类
class Animal1
{
public:
int m_age;
};
//利用虚继承 解决菱形继承问题
// //在继承之前加上关键字 virtual
//羊类
class Sheep:virtual public Animal1{};
//驼类
class Tuo:virtual public Animal1{};
//羊驼类
class Yangtuo:public Sheep,public Tuo{};
void test14()
{
Yangtuo st;
st.Sheep::m_age = 18;
st.Tuo::m_age = 28;
//当出现菱形继承时,两个父类拥有相同的数据,需要加作用域区分
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;
//菱形继承导致数据有两份,资源浪费
}
int main9()
{
test14();
//test15();
system("pause");
return 0;
}