zoukankan      html  css  js  c++  java
  • C++ 纯虚函数 + 抽象类

    • 纯虚函数:没有函数体,只有函数声明

    • 抽象类:包含纯虚函数的类

      • 之所以说它抽象,是因为它无法实例化,也就是无法创建对象。
      • 纯虚函数没有函数体,不是完整的函数,无法调用,也无法为其分配内存空间。
      • 抽象类通常是作为基类,让派生类去实现纯虚函数,派生类必须实现纯虚函数才能被实例化。
      #include <iostream>
      using namespace std;
      
      //线
      //Line是抽象类,也是最顶层的基类 
      class Line{
      public:
          Line(float len); //构造函数 
          virtual float area() = 0;
          virtual float volume() = 0;
      protected:
          float m_len;
      };
      Line::Line(float len): m_len(len){ }
      
      //矩形
      //实现了area()函数(就是定义了纯虚函数的函数体)。没有实现纯虚函数volume(),Rec仍然是抽象类 
      class Rec: public Line{
      public:
          Rec(float len, float width); //构造函数 
          float area();
      protected:
          float m_width;
      };
      Rec::Rec(float len, float width): Line(len), m_width(width){ }
      float Rec::area(){ return m_len * m_width; }
      
      //长方体
      //不是抽象类,可以被实例化 
      class Cuboid: public Rec{
      public:
          Cuboid(float len, float width, float height); //构造函数 
          float area();
          float volume();
      protected:
          float m_height;
      };
      Cuboid::Cuboid(float len, float width, float height): Rec(len, width), m_height(height){ }
      float Cuboid::area(){ return 2 * ( m_len*m_width + m_len*m_height + m_width*m_height); }
      float Cuboid::volume(){ return m_len * m_width * m_height; }
      
      //正方体
      class Cube: public Cuboid{
      public:
          Cube(float len); //构造函数 
          float area();
          float volume();
      };
      Cube::Cube(float len): Cuboid(len, len, len){ }
      float Cube::area(){ return 6 * m_len * m_len; }
      float Cube::volume(){ return m_len * m_len * m_len; }
      
      //继承关系:Line --> Rec --> Cuboid --> Cube 
      
      int main(){
          Line *p = new Cuboid(10, 20, 30); //基类指针指向派生类Cuboid 
          cout<<"The area of Cuboid is "<<p->area()<<endl;
          cout<<"The volume of Cuboid is "<<p->volume()<<endl;
        
          p = new Cube(15); //基类指针指向Cube 
          cout<<"The area of Cube is "<<p->area()<<endl;
          cout<<"The volume of Cube is "<<p->volume()<<endl;
      
          return 0;
      }
      
      /*运行结果:*/
      The area of Cuboid is 2200
      The volume of Cuboid is 6000
      The area of Cube is 1350
      The volume of Cube is 3375
      
    • 纯虚函数的主要目的:

      • 抽象类处了约束派生类的功能,还可以实现多态。
  • 相关阅读:
    大数据之软件安装(一)-yum源配置
    Python随笔之常用模块-time&datetime模块
    Python随笔之文件操作
    linux 安装 mysql8 (ubuntu)
    让cat命令有颜色得输出文件(ccat)
    VMware Workstation 15 Pro 永久激活密钥
    python常用
    静态代理模式
    mysql常用命令及常见问题
    vue+django 项目 打包
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12334945.html
Copyright © 2011-2022 走看看