继承
/*
继承的好处:减少重复代码
语法:class 子类 : 继承方式 父类
class A:public B;
A类称为子类或派生类
子类 也称为 派生类
父类 也称为 基类
派生类中的成员,包含两大部分:
一类是从基类继承过来的,一类是自己增加的成员。
从基类继承过来的表现其共性,而新增的成员体现了其个性
*/
/*继承方式
public、protected、private
继承得到的级别要小于等于继承方式
*/

继承,怎么写继承,继承调用顺序,继承方式的理解
1 #include <iostream> 2 using namespace std; 3 /* 4 继承的好处:减少重复代码 5 语法:class 子类 : 继承方式 父类 6 class A:public B; 7 A类称为子类或派生类 8 子类 也称为 派生类 9 父类 也称为 基类 10 11 派生类中的成员,包含两大部分: 12 一类是从基类继承过来的,一类是自己增加的成员。 13 从基类继承过来的表现其共性,而新增的成员体现了其个性 14 */ 15 /*继承方式 16 public、protected、private 17 继承得到的级别要小于等于继承方式 18 */ 19 20 /*顺序问题,先父类再子类 21 父构造,子构造,子析构,父析构 22 */ 23 24 /*继承同名成员处理 25 访问子类同名成员 直接访问即可 26 访问父类同名成员 需要加作用域 27 如果子类中出现和父类同名的成员函数, 28 子类的同名成员会隐藏掉 父类中所有同名成员函数 29 如果想访问到父类中被隐藏的同名成员函数,需要加作用域 30 ---静态成员也是一样 31 */ 32 33 /*多继承语法 34 语法:class 子类 : 继承方式 父类 : 继承方式 父类2... 35 !!!C++实际开发中不建议使用多继承 36 */ 37 class A{ 38 public: 39 A(){ 40 cout<<"这是A,也是父类"<<endl; 41 } 42 ~A(){ 43 cout<<"这是父类A的析构函数"<<endl; 44 } 45 void show(){ 46 cout<<"这是父类A的show函数"<<endl; 47 } 48 }; 49 class B:public A{ 50 public: 51 B(){ 52 cout<<"这是B,应作为子类"<<endl; 53 } 54 ~B(){ 55 cout<<"这是子类B的析构函数"<<endl; 56 } 57 void show(){ 58 cout<<"这是子类B的show函数"<<endl; 59 } 60 61 }; 62 class C:public A,public B{ 63 public: 64 C(){ 65 cout<<"这是C,是个子类"<<endl; 66 } 67 ~C(){ 68 cout<<"这是子类C的析构函数"<<endl; 69 } 70 void show(){ 71 cout<<"这是子类C的show函数"<<endl; 72 } 73 }; 74 void test01(){ 75 // A a; 76 // B b; 77 // 78 // b.A::show(); 79 // //如果通过子类对象 访问到父类中同名成员要加作用域 80 // b.show(); 81 C c; 82 cout<<"sizeof(c)="<<sizeof(c)<<endl; 83 } 84 85 int main() 86 { 87 test01(); 88 return 0; 89 }
菱形继承问题与虚继承的解决方法
为了解决多继承时的命名冲突和冗余数据问题,C++ 提出了虚继承,使得在派生类中只保留一份间接基类的成员。
1 #include <iostream> 2 using namespace std; 3 4 //动物类 5 class Animal{ 6 public: 7 int m_Age; 8 }; 9 //利用虚继承解决菱形继承的问题 10 //继承之前加上关键子virtual变为虚继承 11 //Animal类称为 虚基类 12 /*为了解决多继承时的命名冲突和冗余数据问题, 13 C++ 提出了虚继承,使得在派生类中只保留一份间接基类的成员。*/ 14 //羊类 15 class Sheep:virtual public Animal{ 16 17 }; 18 //驼类 19 class Camel:virtual public Animal{ 20 21 }; 22 //羊驼类 23 24 class Alpaca:public Sheep,public Camel{ 25 26 }; 27 28 29 void test01(){ 30 Alpaca alpaca; 31 alpaca.Sheep::m_Age=10; 32 alpaca.Camel::m_Age=18; 33 cout<<"alpaca.Sheep::m_Age="<<alpaca.Sheep::m_Age<<endl; 34 cout<<"alpaca.Camel::m_Age="<<alpaca.Camel::m_Age<<endl; 35 cout<<"alpace.mAge="<<alpaca.m_Age<<endl; 36 } 37 38 int main() 39 { 40 test01(); 41 return 0; 42 }
浙公网安备 33010602011771号