• C++中的继承


    •  继承的作用:
    • 父类中非保护权限的方法和属性(函数和变量)拷贝至子类(可以简单这么理解,因为有重写和虚函数指针这种东西不好理解,后面的博文会另外介绍)
    • 继承的基本语法:
    1. class 子类名 : 继承方式(权限) 基类名(父类名)
    2. {
    3. }

     简单的实现和测试:

    1. class BasePage
    2. {
    3. public:
    4. void header()
    5. {
    6. cout << "基础框架" << endl;
    7. }
    8. };
    9. class FuncFragment : public BasePage
    10. {
    11. public:
    12. void content()
    13. {
    14. cout << "正文" << endl;
    15. }
    16. };
    17. //继承:
    18. void test5()
    19. {
    20. FuncFragment().header(); //这里访问的是子类继承过来的方法,不是父类的方法
    21. FuncFragment().content();
    22. }

    注意:

    • class中的默认权限为private
    • 父类中的private(私有)成员在子类中无法使用(被继承过去了,也占用空间,但是被隐藏了,无法访问)。
    • 不同继承方式继承带来的区别:
    • public: 父类中所有public成员在子类中为public属性,

            父类中所有protected成员在子类中为protected属性ed

    • protected: 父类中所有public成员和protected成员,在子类中为protected属性
    • private: 父类中所有public成员和protected成员,在子类中为private属性

    • 关于菱形继承问题:
    • 一个基本类:                          动物类
    • 两个子类:                        羊类, 骆驼类
    • 一个孙子类(没有孙子类): 羊驼类

    类,和类继承动物类;羊驼类继承类和

    会导致动物类被羊驼类多次继承

    为了避免这种情况,就有了虚继承的出现

    • 虚继承:可以理解为共享数据(或者理解为复制地址),在子类中更改虚继承的数据时,虚基类中对应的值也会被更改
      1. class Animal //虚基类
      2. {
      3. public:
      4. Animal(){
      5. len = 10;
      6. };
      7. int len;
      8. };
      9. class Sheep : virtual public Animal
      10. {
      11. public:
      12. };
      13. C
      14. class Camel: virtual public Animal
      15. {
      16. public:
      17. };
      18. class CNM : public Sheep, public Camel
      19. {
      20. public:
      21. };
      22. //菱形继承问题:
      23. void test2()
      24. {
      25. CNM sun;
      26. cout << sun.len << endl;
      27. cout << CNM().Sheep::len << endl;
      28. }

      //VStudio 开发人员命令提示符操作:

            进入目标盘符->目标路径->dir查看索引->cl /d1 reportSingleClassLayout类名 文件名.cpp

            可以查看空间使用情况。详情请见黑马c++教程菱形继承章节

  • 相关阅读:
    No valid crumb was included in the request
    Python4
    最新版VMWare安装Linux的详细过程
    Vue3 - 路由 Vue-router 4.X(配置与使用教程)
    nodejs的express负载均衡(续)
    [实践篇]13.6 QNX侧如何抓取日志?
    stamp mismatch with notes file
    小说网站,小说阅读器,小说阅读网站毕业设计
    1688搜索店铺列表 API
    Redis高可用集群(哨兵、集群)
  • 原文地址:https://blog.csdn.net/KamikazePilot/article/details/126150727