zoukankan      html  css  js  c++  java
  • 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;
    }
    

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

  • 相关阅读:
    input在输入后回车会刷新当前页面解决
    JS生成当前页面URL二维码
    页面点击特效
    Datetime 使用详解
    三元运算符
    获取checkbox所选中的值
    获取select中所选中option值
    ashx
    python flask 如何读取数据库数据并返回到html
    python3.5+installer 将.py 打包成.exe
  • 原文地址:https://www.cnblogs.com/BY1314/p/13139413.html
Copyright © 2011-2022 走看看