• 20. 纯虚函数和抽象类


    在多态中,通常父类中的虚函数实现是毫无意义的,主要是调用子类重写的内容因此可以将虚函数改为纯虚函数

    1. 纯虚函数语法:virtual 返回值类型 函数名(参数列表)= 0;
    2. 当类中有了纯虚函数,这个类也成为抽象类
    3. 抽象类特点
    • 无法实例化对象
    • 子类必须重写抽象类中的纯虚函数,否则也属于抽象类

    #include <iostream>
    using namespace std;
    //纯虚函数和抽象类
    class Base
    {
    public:
          //只要有一个纯虚函数,这个类就是抽象类
          //1.无法实例化对象(没办法写对象)
          virtual void func() = 0;
    };
    class Son:public Base
    {
    public:
          virtual void func()
          {
                cout << "func函数调用" << endl;
          };
    };
    void test01()
    {
         //Base b; //无法实例化对象,会报错
    
          Son s; //子类必须重写父类中的纯虚函数,否则无法实例化对象
          
          //利用多态的技术调用:指针或引用调用接口
          Base *base =new Son;
          base -> func();
    }
    int main()
    {
          test01();
          system("pause");
          return 0;
    }
    
    1. 小案例:制作冷饮
      案例描述:煮水、冲泡、倒杯中、加入辅料,利用多态实现
    #include <iostream>
    using namespace std;
    class abstractdrinking
    {
    public:
          //煮水
          virtual void Boil () = 0;
          //冲泡
          virtual void Brew () = 0;
          //倒入杯中
          virtual void Pour () = 0;
          //加入辅料
          virtual void putsomething () = 0;
    
          //制作饮品
          void makeDrink() //接口
          {
                Boil();
                Brew ();
                Pour () ;
                putsomething ();
          }
    };
    class  Coffee:public abstractdrinking
    {
    public:
          //煮水
          virtual void Boil () 
          {
                cout << "煮农夫山泉" << endl;
          }
          //冲泡
          virtual void Brew ()
          {
                cout << "冲泡咖啡" << endl;
          }
          //倒入杯中
          virtual void Pour()
          {
                cout << "倒入杯中" << endl;
          }
          //加入辅料
          virtual void putsomething () 
          {
                cout << "加入牛奶" << endl;
          }
    };
    
    class  Tea : public abstractdrinking
    {
    public:
          //煮水
          virtual void Boil() 
          {
                cout << "煮山泉" << endl;
          }
          //冲泡
          virtual void Brew()
          {
                cout << "冲泡茶叶" <<endl;
          }
          //倒入杯中
          virtual void Pour()
          {
                cout << "倒入杯中" << endl;
          }
          //加入辅料
          virtual void putsomething() 
          {
                cout << "加入枸杞" << endl;
          }
    };
    //制作函数,调用父类中的制作接口
    void dowork(abstractdrinking *abs)
    {
          abs->makerDrink();  //一个接口多种形态,实现了多态
          delete abs;  //堆区开辟记得释放
    }
    void test01()
    {
          dowork(new Coffee);
          dowork(new Tea);
    }
    int main()
    {
          tets01();
          system("pause");
          return 0;
    }
    

    小结:拥有纯虚函数的一定是父类(无法被实例化),且子类必须实现这个函数,否则还是抽象类

  • 相关阅读:
    nodejs
    Linux 的常用命令
    vue入门学习1_事件及修饰符
    mongo笔记
    spring boot笔记
    CentOS 6 ElasticSearch 5.5.x 安装指南
    linux用户和用户组
    linux下配置安装
    linux命令
    elasticsearch
  • 原文地址:https://www.cnblogs.com/BY1314/p/13139413.html
Copyright © 2020-2023  润新知