• 派生类


     

    类的派生与继承

     1、由基类派生出派生类的语法形式
    C++中由基类派生出派生类的语法形式为:
        class 派生类名:访问限定符 基类名1《,访问限定符 基类名2,……,访问限定符 基类名n 》
        {
            《 《private: 》成员表1;》
            //派生类增加或替代的私有成员
            《public: 成员表2;》
            //派生类增加或替代的公有成员
            《protected: 成员表3;》
            //派生类增加或替代的保护成员
        };//分号不可少


    其中,基类1,基类2,……是已声明的类。

    在派生类定义的类体中给出的成员称为派生类成员,它们是新增加的数据和函数成员。这些新增加的成员是派生类对基类的发展,它们给派生类添加了不同于基类的新的属性和功能。派生类成员包括新添加的,也包括通过屏蔽作用,取代基类成员的更新成员。

     2、单一继承和多重继承

      • 单一继承(single-inheritance) :一个派生类只有一个直接基类。
      • 多重继承(multiple-inheritance) :一个派生类可以同时有多个基类。


        派生类吸收了基类的几乎所有成员。

    3、编制派生类的步骤

    编制派生类时可分四步:

    1. 吸收基类的成员:不论是数据成员,还是函数成员,除构造函数与析构函数外全盘接收(继承方式)。
    2. 改造基类成员:声明一个和某基类成员同名的新成员,该新成员将屏蔽基类同名成员。称为同名覆盖(override)
    3. 发展新成员:派生类新成员必须与基类成员不同名,它的加入保证派生类在功能上有所发展。
    4. 重写构造函数与析构函数。

    说明:

    • 第2步中,新成员若是成员函数,参数表也必须一样,否则是重载。
    • 第3步中,独有的新成员才是继承与派生的核心特征。
    • 第4步是重写构造函数与析构函数,派生类不继承这两种函数。
    • 例如,在顺序表中,要求把数组改为动态建立,采用派生类的方法,在第二步用动态数组把静态数组覆盖掉;原来的构造函数与析构函数完全不能用了,新的函数要进行动态(堆)内存的分配与释放。
    • 不管原来的函数是否可用一律重写可免出错。
    • 定义形式

      派生类的构造函数的定义形式为:
          派生类名::派生类名(参数总表):基类名1(参数名表1)
          《,基类名2(参数名表2),……,基类名n(参数名表n)》,《成员对象名1(成员对象参数名表1),……,成员对象名m(成员对象参数名表m)》
          {
              ……//派生类新增成员的初始化
          }; //所列出的成员对象名全部为新增成员对象的名字
    • 注意:
      • 声明派生类的构造函数时,冒号及冒号以后部分必须略去。
      • 所谓不能继承构造和析构,并不是不能利用,而是把基类的构造函数作为派生类构造函数的一部分,或说调用基类的构造函数
      • 派生类构造函数的定义,与包含成员对象类的构造函数相类似。
      • 冒号后的基类名、成员对象名的次序可以随意,这里的次序与调用次序无关。
      • 执行次序

        派生类构造函数各部分的执行次序为:
        1. 进行基类成员初始化——按各基类在派生类定义中的先后顺序,依次调用它们的构造函数。
        2. 若派生类中包含对象成员,还要进行对象成员初始化——按新增成员对象在类定义中排列的先后顺序,依次调用它们的构造函数。
        3. 派生类的构造函数体中的操作
        4. 说明:
          • 构造在类层次的根处开始,在每一层,首先调用基类构造函数,然后调用对象成员的构造函数。
          • 析构函数各部分执行次序与构造函数相反,首先对派生类新增一般成员析构,然后对新增对象成员析构,最后对基类成员析构。
  • 相关阅读:
    电脑休眠真是神一样
    用visual studio 2017来调试python
    判断两个字符串是不是异位词
    算法题思路总结和leecode继续历程
    今日头条笔试题目,还是没过.效率不够
    The init method
    Object-oriented features
    Modifiers
    Pure functions
    Classes and functions
  • 原文地址:https://www.cnblogs.com/htys/p/3312720.html
Copyright © 2020-2023  润新知