纯虚函数与抽象类

FigureOut / 2024-03-23 / 原文

当类中有了纯虚函数,这个类也就是抽象类,

抽象类的特点:

   无法实例化对象

   子类必须重写抽象类中的纯虚函数,否则也属于抽象类

 

纯虚函数语法:  

virtual  返回值类型 函数名  (参数列表)=0

  

 

#include <iostream>

class AbstractDrink{
public:
    //煮水
    virtual void Boil()=0;
    
    //冲泡
    virtual void Brew()=0;

    //倒入杯中
    virtual void PourInCup()=0;

    //加入辅料
    virtual void PutSomething()=0; 

    //制作
    void makeDrink(){
        Boil();
        Brew();
        PourInCup();
        PutSomething();
    }
};


class Coffee:public AbstractDrink{
     virtual void Boil(){
        std::cout<<"煮农夫山泉"<<std::endl;
     };
    
    //冲泡
    virtual void Brew(){
        std::cout<<"冲泡"<<std::endl;
    };

    //倒入杯中
    virtual void PourInCup(){
        std::cout<<"倒入杯中"<<std::endl;
    };

    //加入辅料
    virtual void PutSomething(){
        std::cout<<"加入糖和牛奶"<<std::endl;
    }; 

};

class Tea:public AbstractDrink{
     virtual void Boil(){
        std::cout<<"煮矿泉水"<<std::endl;
     };
    
    //冲泡
    virtual void Brew(){
        std::cout<<"冲泡"<<std::endl;
    };

    //倒入杯中
    virtual void PourInCup(){
        std::cout<<"倒入杯中"<<std::endl;
    };

    //加入辅料
    virtual void PutSomething(){
        std::cout<<"加入枸杞"<<std::endl;
    }; 

};


//制作函数
void doWork(AbstractDrink *abs){
    abs->makeDrink();
    delete abs;
}

int main(){
    doWork(new Coffee);
}