• 【C++面向对象】8. 继承


    • 继承允许我们依据一个类来定义另一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了 重用代码功能提高执行时间 的效果。
    • 当创建一个类时,我们不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为 基类(父母),新建的类称为 派生类(新生儿) 。

    【 1. 基本原理 】

    • 一个派生类可以从多个基类继承数据和函数
    • 定义一个派生类的基本形式如下所示。其中:
      • derived-class 是 派生类的名称;
      • access-specifier 是访问修饰符,是 public、protected 或 private 其中的一个; 如果未使用访问修饰符 - access-specifier,则 默认为 private
      • base-class 是需要继承的基类的名称。
    class derived-class: access-specifier base-class
    
    • 1
    • 实例
    #include 
    
    using namespace std;
    
    // 基类
    class Shape 
    {
       public:
          void setWidth(int w)
          {
             width = w;
          }
          void setHeight(int h)
          {
             height = h;
          }
       protected:
          int width;
          int height;
    };
    
    // 派生类
    class Rectangle: public Shape
    {
       public:
          int getArea()
          { 
             return (width * height); 
          }
    };
    
    int main(void)
    {
       Rectangle Rect; // 定义一个派生类Rectangle 的对象Rect
    
       Rect.setWidth(5);  //为对象Rect赋初值
       Rect.setHeight(7);
    
       cout << "Total area: " << Rect.getArea() << endl;// 输出对象的面积
    
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这里插入图片描述

    【 2. 派生类的访问权限 】

    • 派生类可以访问基类中所有的非私有成员(public 和 protected 成员)。因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private。
    publicprotectedprivate
    同一个类 / 友元类
    派生类×
    外部的类××

    【 3. 派生类继承得到的成员的权限 】

    • 根据派生类的继承类型,派生类继承得到的基类的成员的类型也有不同。
    • 通常使用 public 继承,几乎不使用 protected 或 private 继承。
    • private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;protected 成员可以被派生类访问。
    基类 成员的访问属性派生 成员的访问属性
    public继承public → public
    private → private
    protected → protected
    private 继承public → private
    private → private
    protected → private
    protected 继承public → protected
    private → private
    protected → protected

    【 4. 多继承 】

    • 多继承即一个子类可以有多个父类,它继承了多个父类的特性。
    • 通过使用一个 类派生列表 可以用来指定派生类的 基类,类派生列表以一个或多个基类命名C++ 类可以从多个类继承成员,其中,继承方式是 public、protected 或 private 其中的一个,用来修饰每个基类,各个基类之间用逗号分隔。语法如下:
    class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,{
            <派生类类体>
    };
    
    • 1
    • 2
    • 3
    • 4
    • 实例
    #include 
    
    using namespace std;
    
    // 第1个基类 Shape
    class Shape 
    {
       public:
          void setWidth(int w)
          {
             width = w;
          }
          void setHeight(int h)
          {
             height = h;
          }
       protected:
          int width;
          int height;
    };
    
    // 第2个基类 PaintCost
    class PaintCost 
    {
       public:
          int getCost(int area)
          {
             return area * 70;
          }
    };
    
    // 派生类
    class Rectangle: public Shape, public PaintCost
    {
       public:
          int getArea()
          { 
             return (width * height); 
          }
    };
    
    int main(void)
    {
       Rectangle Rect;
       int area;
    
       Rect.setWidth(5);
       Rect.setHeight(7);
    
       area = Rect.getArea();
    
       // 输出对象的面积
       cout << "Total area: " << Rect.getArea() << endl;
    
       // 输出总花费
       cout << "Total paint cost: $" << Rect.getCost(area) << endl;
    
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    在这里插入图片描述

  • 相关阅读:
    8.JavaScript-注释
    Node.js学习篇(一)利用fs引入文件和写入或修改文件以及path
    【前端版】分布式医疗云平台【Open-his 环境搭建、前台 vue-element-ui 搭建】(十六)
    要如何选择报修工单管理系统?需要注意哪些核心功能?
    【Python 千题 —— 基础篇】分句成词
    教师教学质量评价管理系统(ASP.net+SqlServer)
    java.io.File类常用的方法
    Linux常用环境Docker安装
    FPGA 学习笔记:Vivado 2018.2 MicroBlaze Uartlite 配置
    PHP自适应小说网站源码深度SEO优化自动采集
  • 原文地址:https://blog.csdn.net/qq_44431690/article/details/134038872