• C++代码重用(一)



    c++的一个主要目标就是促进代码重用,缩短代码开发时间。其中继承就是实现该目标的机制之一。

    1. 私有继承

    私有继承提供的特性与包含相同:获得实现,并不获得接口。两者都可以用来实现has-a的关系。

    私有继承使用关键字private(实际上在继承中private是默认值,因此省略访问限定符也将导致私有继承)。

    使用多个基类的继承被称为多重继承,例如:

    class A{};
    class B{};
    class C : private A,private B{    //多重继承
      ...  
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    2. 保护继承

    保护继承是私有继承的变体。保护继承在列出基类的时候使用关键子protected;保护继承使得基类的公有成员和保护成员都将称为派生类的保护成员,其与私有继承一样,基类的接口在派生类中都是可用的,但是在继承层次结构之外是不可用的。两者的最大区别在于派生类再派生出另外一个类的时候,使用私有继承第三代类将不能使用基类的接口,因为基类的公有方法在第二代类中变成了私有方法;但是在使用保护继承,第三代类可以使用基类的接口,因为在第二代类中基类的公有方法变成受保护的,因此在第三代类中可以使用它们。

    公有继承、私有继承和保护继承的特点如下:

    特征公有继承保护继承私有继承
    基类的公有成员变成派生类的公有成员派生类的保护成员派生类的私有成员
    基类的保护成员变成派生类的保护成员派生类的保护成员派生类的私有成员
    基类的私有成员变成只能通过基类的接口访问只能通过基类接口访问只能通过基类接口访问
    能否隐式向上转换是(但只能在派生类中)

    (注:这里的隐式向上转换只意味着无需进行显式类型转换,就可以将基类指针或引用指向派生类对象)

    3. 使用using重新定义访问权限

    在使用私有派生和保护派生的时候,基类的公有成员函数将成为私有成员和保护成员。如果希望基类的方法能够在派生类外面可用的话,首先我们能想到的是在派生中定义一个公有方法,在该方法中调用基类的方法,进而实现该效果。另外一种方法就是使用using重新定义访问权限。

    class Base{
        ...
     public:
        double min();
        double max();
        ...
    };
    
    class A:private Base{
        ...
     public:
        using Base::min; //using只使用成员名,不需要圆括号、函数特征标和返回类型
        using Base::max;
        ...
    };
    
    //调用
    A a;
    double min = a.min();
    double max = a.max();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    躲避雪糕刺客?通过爬虫爬取雪糕价格
    P02014258 苏英秦 信息论作业
    3.k8s dashboard设置域名登录案例(ingress版本为1.3.1)
    十五、修改VGG16网络来适应自己的需求
    Java反射
    数据结构第一课 —— 时间和空间复杂度
    【遥感变化检测综述】—《多时相遥感影像的变化检测研究现状与展望》
    Unity DOTS技术(八)状态组件
    网络编程面试笔试真题
    【小程序从0到1】小程序常用组件一览
  • 原文地址:https://blog.csdn.net/jianmo1993/article/details/128027495