hyp永恒冰川 2022-04-30 22:20 采纳率: 66.7%
浏览 28
已结题

c++多态的问题,纯虚函数的重写

为什么我调用了子类的makedrink方法后,重写的boil,brew,input,putsth方法里面的内容没有输出?我的编译环境是vscode
输出结果如下:

making drink
making drink
[1] + Done

源代码


#include<iostream>
using namespace std;
class makedrink
{
    public:
    virtual void boil()=0;
    virtual void brew()=0;
    virtual void input()=0;
    virtual void putsth()=0;
    void mkprecedure(){
        cout<<"making drink"<<endl;
        void boil();
        void brew();
        void input();
        void putsth();
    }
};
class coffe:public makedrink
{
    public:
    virtual void boil(){
        cout<<"boiling water"<<endl;
    }
    virtual void brew(){
        cout<<"brewing coffe"<<endl;
    }
    virtual void input(){
        cout<<"put into a cup"<<endl;
    }
    virtual void putsth(){
        cout<<"putsht into the drink"<<endl;
    }
};
class tea:public makedrink
{
    public:
     virtual void boil(){
        cout<<"boiling water"<<endl;
    }
    virtual void brew(){
        cout<<"brewing tea"<<endl;
    }
    virtual void input(){
        cout<<"put into a cup"<<endl;
    }
    virtual void putsth(){
        cout<<"putsht into the drink"<<endl;
    }
};
void function1(makedrink* drink){
    drink->mkprecedure();
    delete drink;
}
void test(){
    function1(new coffe);
    function1(new tea);
}
int main(){
    test();
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 树下等苹果 2022-04-30 22:48
    关注

    mkprecedure函数改成如下,你加上void变成声明了,应该是调用才对:

    
      void mkprecedure() {
            cout << "making drink" << endl;
            boil();
            brew();
            input();
            putsth();
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月9日
  • 已采纳回答 5月1日
  • 创建了问题 4月30日