C++笔记4.67

知识点1 继续复习类的封装

知识点2 继承和派生的概述(了解)

继承的优点:减少代码的冗余 提高代码的重用性

知识点3 继承的格式

  1. //派生类定义格式  
  2. class 派生类名:继承方式 基类名  
  3. {  
  4.     //派生类新增的数据成员和成员函数  
  5. };  
  6.   
  7. class 子类:继承方式 父类名  
  8. {  
  9.     //子类新增的数据成员和成员函数  
  10. };  

按继承方式分类:

public:公有继承(重要)

private:私有继承

protected:保护继承

按父类个数分类:

单继承:指每个派生类只继承了一个基类的特征(一个父类派生出一个子类)

多继承:指多个基类派生出一个派生类的继承关系,多继承的派生类直接继承了不止一个基类的特征(多个父类派生出一个子类)

注意事项:

子类继承父类,子类拥有父类中的全部成员变量和成员方法(除了构造和析构之外的成员党法),但是在子类中,继承的成员并不一定能直接访问,不同的继承方式会导致不同的访问权限。

案例1 公有继承public

  1. #include <iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. //设置一个父类  
  6. class Base  
  7. {  
  8. public:  
  9.     int a;  
  10. private:  
  11.     int b;  
  12. protected:  
  13.     int c;  
  14. };  
  15.   
  16. //设置一个子类  
  17. class Son:public Base  
  18. {  
  19. public:  
  20.     //父类中的public数据在子类也是public  
  21.     //父类中的private数据在子类中不可见  
  22.     //父类中的protected数据在子类中是protected  
  23.     //子类的内部  
  24.     void showSon()  
  25.     {  
  26.         //b = 200;不能直接访问  
  27.         c = 300;//在子类内部可以访问  
  28.     }  
  29. };  
  30.   
  31. int main()  
  32. {  
  33.     //子类的外部  
  34.     Son ob;  
  35.     ob.a = 100;  
  36.     cout << "父类中的public数据a = " << ob.a << endl;  
  37.     //ob.b = 200;在子类外访问不了  
  38.     //ob.c = 200;在类外访问不了  
  39.     return 0;  
  40. }  

案例2 保护继承protected

  1. class Son1:protected Base  
  2. {  
  3. public:  
  4.     //父类中的public数据在子类是protected  
  5.     //父类中的private数据在子类中不可见  
  6.     //父类中的protected数据在子类中是protected  
  7.     //子类的内部  
  8.     void showbase()  
  9.     {  
  10.         a = 100;//子类的内部可以访问  
  11.         //b = 200;不能直接访问  
  12.         c = 300;//子类的内部可以访问  
  13.     }  
  14. };  
  15.   
  16. int main()  
  17. {  
  18.     Son1 ob;  
  19.     //ob.a;子类外不可访问  
  20.     //ob.b;子类外不可访问  
  21.     //ob.c;子类外不可访问  
  22.     return 0;  
  23. }  

案例3 私有继承private

  1. class Son2:private Base  
  2. {  
  3. public:  
  4.     //父类中的public数据在子类是private  
  5.     //父类中的private数据在子类中不可见  
  6.     //父类中的protected数据在子类中是private  
  7.     //子类的内部  
  8.     void showbase()  
  9.     {  
  10.         a = 100;//子类的内部可以访问  
  11.         //b = 200;不能直接访问  
  12.         c = 300;//子类的内部可以访问  
  13.     }  
  14. };  
  15.   
  16. int main()  
  17. {  
  18.     Son2 ob;  
  19.     //ob.a;子类外不可访问  
  20.     //ob.b;子类外不可访问  
  21.     //ob.c;子类外不可访问  
  22.     return 0;  
  23. }  

总结

不管什么继承方式,父类中的私有数据在子类中不可见(可以通过调用父类中公有方法访问)

发表评论

邮箱地址不会被公开。 必填项已用*标注