• C++零碎记录(九)


    15. 继承

    15.1 继承简洁

    ① 继承是面向对象的三大特性之一。

    ② 定义类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候,就可以考虑利用继承技术,减少重复代码。

    15.2 普通实现

    1. #include <iostream>
    2. using namespace std;
    3. #include<string>
    4. //打印输出类
    5. class Java
    6. {
    7. public:
    8. void header()
    9. {
    10. cout << "首页、公开课、登陆、注册...(公共头部)" << endl;
    11. }
    12. void footer()
    13. {
    14. cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
    15. }
    16. void left()
    17. {
    18. cout << "Java、Python、C++....(公共分类列表)" << endl;
    19. }
    20. void content()
    21. {
    22. cout << "Java学科视频" << endl;
    23. }
    24. };
    25. class Python
    26. {
    27. public:
    28. void header()
    29. {
    30. cout << "首页、公开课、登陆、注册...(公共头部)" << endl;
    31. }
    32. void footer()
    33. {
    34. cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
    35. }
    36. void left()
    37. {
    38. cout << "Java、Python、C++....(公共分类列表)" << endl;
    39. }
    40. void content()
    41. {
    42. cout << "Python学科视频" << endl;
    43. }
    44. };
    45. class CPP
    46. {
    47. public:
    48. void header()
    49. {
    50. cout << "首页、公开课、登陆、注册...(公共头部)" << endl;
    51. }
    52. void footer()
    53. {
    54. cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
    55. }
    56. void left()
    57. {
    58. cout << "Java、Python、C++....(公共分类列表)" << endl;
    59. }
    60. void content()
    61. {
    62. cout << "C++学科视频" << endl;
    63. }
    64. };
    65. void test01()
    66. {
    67. cout << "Java下载视频页面如下:" << endl;
    68. Java ja;
    69. ja.header();
    70. ja.footer();
    71. ja.left();
    72. ja.content();
    73. cout << "........................" << endl;
    74. cout << "Python下载视频页面如下:" << endl;
    75. Python py;
    76. py.header();
    77. py.footer();
    78. py.left();
    79. py.content();
    80. cout << "........................" << endl;
    81. cout << "C++下载视频页面如下:" << endl;
    82. CPP cpp;
    83. cpp.header();
    84. cpp.footer();
    85. cpp.left();
    86. cpp.content();
    87. }
    88. int main()
    89. {
    90. test01();
    91. system("pause");
    92. return 0;
    93. }

    运行结果:

    • Java下载视频页面如下:
    • 首页、公开课、登陆、注册...(公共头部)
    • 帮助中心、交流合作、站内地图...(公共底部)
    • Java、Python、C++....(公共分类列表)
    • Java学科视频
    • ........................
    • Python下载视频页面如下:
    • 首页、公开课、登陆、注册...(公共头部)
    • 帮助中心、交流合作、站内地图...(公共底部)
    • Java、Python、C++....(公共分类列表)
    • Python学科视频
    • ........................
    • C++下载视频页面如下:
    • 首页、公开课、登陆、注册...(公共头部)
    • 帮助中心、交流合作、站内地图...(公共底部)
    • Java、Python、C++....(公共分类列表)
    • C++学科视频
    • 请按任意键继续. . .

    15.3 继承实现

    1. #include <iostream>
    2. using namespace std;
    3. #include<string>
    4. //打印输出类
    5. class BasePage
    6. {
    7. public:
    8. void header()
    9. {
    10. cout << "首页、公开课、登陆、注册...(公共头部)" << endl;
    11. }
    12. void footer()
    13. {
    14. cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
    15. }
    16. void left()
    17. {
    18. cout << "Java、Python、C++....(公共分类列表)" << endl;
    19. }
    20. };
    21. // 继承的好处:减少重复代码
    22. // 语法:class 子类:继承方式 父类
    23. // 子类 也称为 派生类
    24. // 父类 也称为 基类
    25. //Java页面
    26. class Java:public BasePage //继承了BasePage,把BasePage里面的内容全部拿到手了
    27. {
    28. public:
    29. void content()
    30. {
    31. cout << "Java学科视频" << endl;
    32. }
    33. };
    34. //Python页面
    35. class Python :public BasePage //继承了BasePage,把BasePage里面的内容全部拿到手了
    36. {
    37. public:
    38. void content()
    39. {
    40. cout << "Python学科视频" << endl;
    41. }
    42. };
    43. //C++页面
    44. class CPP :public BasePage //继承了BasePage,把BasePage里面的内容全部拿到手了
    45. {
    46. public:
    47. void content()
    48. {
    49. cout << "CPP学科视频" << endl;
    50. }
    51. };
    52. void test01()
    53. {
    54. cout << "Java下载视频页面如下:" << endl;
    55. Java ja;
    56. ja.header();
    57. ja.footer();
    58. ja.left();
    59. ja.content();
    60. cout << "........................" << endl;
    61. cout << "Python下载视频页面如下:" << endl;
    62. Python py;
    63. py.header();
    64. py.footer();
    65. py.left();
    66. py.content();
    67. cout << "........................" << endl;
    68. cout << "C++下载视频页面如下:" << endl;
    69. CPP cpp;
    70. cpp.header();
    71. cpp.footer();
    72. cpp.left();
    73. cpp.content();
    74. }
    75. int main()
    76. {
    77. test01();
    78. system("pause");
    79. return 0;
    80. }

    运行结果:

    • Java下载视频页面如下:
    • 首页、公开课、登陆、注册...(公共头部)
    • 帮助中心、交流合作、站内地图...(公共底部)
    • Java、Python、C++....(公共分类列表)
    • Java学科视频
    • ........................
    • Python下载视频页面如下:
    • 首页、公开课、登陆、注册...(公共头部)
    • 帮助中心、交流合作、站内地图...(公共底部)
    • Java、Python、C++....(公共分类列表)
    • Python学科视频
    • ........................
    • C++下载视频页面如下:
    • 首页、公开课、登陆、注册...(公共头部)
    • 帮助中心、交流合作、站内地图...(公共底部)
    • Java、Python、C++....(公共分类列表)
    • CPP学科视频
    • 请按任意键继续. . .

    16. 三种继承改变权限

    ① 继承的语法:class 子类:继承方式 父类

    ② 继承方式一共有三种:

    1. 公共继承
    2. 保护继承
    3. 私有继承

    不同的继承方式,父类中的变量被继承后,权限相应的得到了改变,如下图所示。

    1. #include <iostream>
    2. using namespace std;
    3. #include<string>
    4. //打印输出类
    5. class Base1
    6. {
    7. public:
    8. int m_A;
    9. protected:
    10. int m_B;
    11. private:
    12. int m_C;
    13. };
    14. //公共继承
    15. class Son1:public Base1
    16. {
    17. public:
    18. void func()
    19. {
    20. m_A = 10; //父类中的公共权限成员 到子类中依然是公共权限
    21. m_B = 10; //父类中的保护权限成员 到子类中依然是保护权限
    22. //m_C = 10; //父类中的私有权限成员 子类访问不到
    23. }
    24. };
    25. void test01()
    26. {
    27. Son1 s1;
    28. s1.m_A = 100; //公共权限,类内能访问,类外也能访问
    29. //s1.m_B = 100; //保护权限,类内能访问,类外不能访问
    30. }
    31. //保护继承
    32. class Son2:protected Base1
    33. {
    34. public:
    35. void func()
    36. {
    37. m_A = 10; //父类中的公共权限成员 到子类中变为保护权限
    38. m_B = 10; //父类中的保护权限成员 到子类中依然是保护权限
    39. //m_C = 10; //父类中的私有权限成员 子类访问不到
    40. }
    41. };
    42. void test02()
    43. {
    44. Son2 s2;
    45. //s2.m_A = 100; //保护权限,类内能访问,类外不能访问
    46. //s2.m_B = 100; //保护权限,类内能访问,类外不能访问
    47. }
    48. //私有继承
    49. class Son3:private Base1
    50. {
    51. public:
    52. void func()
    53. {
    54. m_A = 10; //父类中的公共权限成员 到子类中变为私有权限
    55. m_B = 10; //父类中的保护权限成员 到子类中变为私有权限
    56. //m_C = 10; //父类中的私有权限成员 子类访问不到
    57. }
    58. };
    59. void test03()
    60. {
    61. Son3 s3;
    62. //s3.m_A = 100; //私有权限,类内能访问,类外不能访问
    63. //s3.m_B = 100; //私有权限,类内能访问,类外不能访问
    64. }
    65. int main()
    66. {
    67. system("pause");
    68. return 0;
    69. }

    运行结果:

    • 请按任意键继续. . .

    链接:https://www.zhihu.com/question/437657370/answer/1692846096

  • 相关阅读:
    python数据库——Mysql
    linux-cma&ion
    UML类图总结
    揭示抽象的奥秘:抽象类与接口得一可安天下
    Sql Server SQL查询优化方法
    深入理解python类的实例变量和类变量
    AtCoder Beginner Contest 329 题解A~F
    详解vue中中localStorage的使用方法
    Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog
    linux环境QT做静态库,QT静态库的创建与使用
  • 原文地址:https://blog.csdn.net/qq18218628646/article/details/132799744