zoukankan      html  css  js  c++  java
  • C++继承关系

    继承和派生概述:

    继承和派生是同一个过程从不同角的度看

    保持已有类的特性而构造新类的过程称为继承。

    在已有类的基础上新增自己的特性而产生新类的过程称为派生。

    被继承的已有类称为基类(或父类)。

    派生出的新类称为派生类(或子类)。

    直接参与派生出某类的基类称为直接基类。

    基类的基类甚至更高层的基类称为间接基类。

    派生的目的

    当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。

     

     

    派生类的构成:

    吸收基类成员

    改造基类成员

    添加新的成员

    吸收基类成员:

    默认情况下派生类包含了全部基类中除构造和析构函数之外的所有成员。

    c++11规定可以用using语句继承基类构造函数。

    改造基类成员:

    如果派生类声明一个和某基类成员同名的新成员,派生的新成员就隐藏或覆盖了外层同名成员。

    添加新的成员:

    派生类增加新成员使派生类在功能上有所发展。

    继承方式

    不同继承方式的影响主要体现在:

    派生类成员对基类成员的访问权限;

    通过派生类对象对基类成员的访问权限。

    三种继承方式:

    公有继承

    私有继承

    保护继承

    公有继承(public):

    继承的访问控制

    基类的public和protected成员:访问属性在派生类中保持不变;

    基类的private成员:不可直接访问。

    访问权限

    派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员;

    通过派生类的对象:只能访问public成员。

    举例:

    定义一个点类(Point)

     

    定义一个矩形类(Rectangle)

     

     

    私有继承(private)

    继承的访问控制:

    基类的public和protected成员:都以private身份出现在派生类中;

    基类的private成员:不可直接访问。

    访问权限:

    派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员;

    通过派生类的对象:不能直接访问从基类继承的任何成员。

    举例

     

     

     

     

    保护继承(protected)

    继承的访问控制

    基类的public和protected成员:都以protected身份出现在派生类中

    基类的private成员:不可直接访问。

    访问权限

    派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员;

    通过派生类的对象:不能直接访问从基类继承的任何成员。

    protected成员的特点与作用

    对建立所在类对象的模块来说,它与private成员的性质相同。

    对于其派生类来说,它与public成员的性质相同。

    既实现了数据隐藏,有方便继承,实现代码重用。

     

    多继承举例

     

     

    //公有继承                      对象访问    成员访问

    public    -->  public              Y         Y

    protected -->  protected     N         Y

    private   -->  private             N         N

    //保护继承                      对象访问    成员访问

    public    -->  protected           N         Y

    protected -->  protected        N         Y

    private   -->  private              N         N

    //私有继承                      对象访问    成员访问

    public    -->  private             N         Y

    protected -->  private          N         Y

    private   -->  private             N         N
    ————————————————
    版权声明:本文为CSDN博主「Vinsmoke -Hou」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/one_super_dreamer/article/details/81611118

  • 相关阅读:
    Mybatis 的 xml 文件语法错误,启动项目时控制台一直循环解析但是不打印错误
    在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。
    【Important】数据库索引原理
    服务化的演变和负载均衡
    【问题集】redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range
    【Spring】Spring中用到的设计模式
    【设计模式】责任链模式
    【!Important】Zookeeper用来做什么的,有几种类型的节点
    【!Important】如何保证线程执行的先后顺序
    【!Important】Java线程死锁查看分析方法
  • 原文地址:https://www.cnblogs.com/sggggr/p/12665093.html
Copyright © 2011-2022 走看看