• 第十一章 继承与派生 学习笔记


    第十一章 继承和派生

     

    1.单继承(子类只有有一个父类)&多继承(子类有多个父类)

    2.派生类的声明方式

    class 派生类名 :继承方式 基类名

    派生类新增加的成员

    };

     

    3.继承方式:

    Public:(公有)

    Private:(私有)

    Protect:(保护)

    4.派生类的构成:

    从基类接收成员:(除构造和析构以外的所有成员)

    调整从基类接收的成员:(改变访问属性)

    对于新增同名成员函数:

    如果参数列表相同:派生类覆盖基类

    如果参数列表不同:函数重载

    在声明派生类时增加的成员:(对基类的具体化)

    5.派生类成员的访问属性

    Public: 基类保持原有的访问属性

    基类在派生类外可见,可以在类外引用基类公有成员;

    Public->public

    Private->不可访问

    Protect->protect

    Private:基类的公有成员不能在基类和派生类外被访问

    基类在派生类外不可见

    Public->private

    Private->不可访问

    Protect->private

    Protect:不能被类外引用,可以被派生类的成员引用

    基类在派生类外不可见,其下一层派生类可访问

    Public->protect

    Private->不可访问

    Protect->protect

    不可访问:*派生类成员函数不能直接访问基类私有成员;

    6.多级派生的访问属性:只看上一级成员属性确定

    7.派生类的构造函数和析构函数

    (在执行派生类的构造函数时,调用基类的构造函数)

    *一般派生类的构造函数

    派生类构造函数名(总参数列表):基类构造函数名(参数表){

    派生类新增数据成员初始化;

    总参数列表:同时包括基类和派生类的参数(同时包括参数类型

    *使用初始化列表:

    参数表:调用基类构造函数(不加参数类型)

    派生类构造函数名(总参数列表):基类构造函数名(参数表),新增数据成员(参数){};

     

    *有子对象的派生类的构造函数

    派生类构造函数名(总参数列表):基类构造函数名(参数表),子对象名(参数表){

    派生类新增数据成员初始化;

    *多层派生时的构造函数

    (先构造基类,再构造子对象,最后构造派生类新增成员)

    (不要列出每一层的派生类的构造函数,只需写出其上一层派生类的构造函数即可)

    *派生构造函数的特殊形式

    当不对派生类新增数据成员进行任何特殊初始操作,派生类构造函数的函数体为空。

    如果基类没有定义构造函数,或者定义了没有参数的构造函数,那么派生类可以不写基类的构造函数,此时调用默认构造函数

    析构函数:(先析构派生类新增成员,再析构子对象,最后析构基类)

    8.多重继承

    *声明多重继承的方法

    Class 派生类名 :<继承方式> 基类1名, <继承方式> 基类2名,......

    新增成员数据初始化;

     

    *多重派生类的构造函数

    派生类构造函数名(总参数表) 基类1构造函数(参数表),基类2构造函数(参数表)

    派生类新增成员数据初始化语句;

     

    *多重函数的二义性

     

    9.虚基类(在继承简洁共同记录是只保留一份成员)

    *虚基类声明方法

    Class A

    Class B : virtual <继承方式> A

    Class C : virtual <继承方式> A

    注意:虚基类并不是在声明基类时声明的,而是在声明派生类,指定继承方式时声明

    Class 派生类名 : virtual <继承方式> 基类名

    *虚基类的初始化(使用初始化列表)

    在最后的派生类中不仅要负责对其基类进行初始化,还要负责对虚基类初始化。

    尽量避免使用多继承

    10.基类和派生类的转换

    只有公有继承能较好的保留了基类的特征,因此,只有共有派生类才是基类真正的子类型。

    只能用子类对象对其基类对象赋值,而不能用基类对象对其子类对象赋值。

    11.继承和组合

    继承(派生类)是纵向关系,组合(复合类)是横向关系。

    个人分享,欢迎指导,未经允许,请勿转载。谢谢!
  • 相关阅读:
    sudo: 在加载插件“sudoers_policy”时在 /etc/sudo.conf 第 0 行出错 sudo: /usr/lib/sudo/sudoers.so 必须只对其所有者可写 sudo:
    ubuntu多版本Python和pip切换
    Ubuntu16.04下安装python3.6.4详细步骤
    oenstack firewalld ufw
    linux相关安全设置
    TransPose: Towards Explainable Human Pose Estimation by Transformer
    TransTrack: Multiple-Object Tracking with Transformer
    Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers
    Adversarial Sparse Transformer for Time Series Forecasting
    Learning to Detect Objects with a 1 Megapixel Event Camera
  • 原文地址:https://www.cnblogs.com/hello-OK/p/7001025.html
Copyright © 2020-2023  润新知