以下代码有什么问题;

时间:2014-08-19 05:12:56

标签: c++

我正在尝试使用和学习虚拟功能,但我的第一次尝试是一团糟。我是个新手,对我很轻松。代码很简单。

#include <iostream>
#include <string.h>
using namespace std;

class milk
{
    string strname;//the string that hold the product name

public:
    milk(string namestr):strname(namestr)//the default constructor
    {}
    string getname()
    {
        return strname;//the only name return function
    }

    virtual void taste()
    {
        cout<<"Iam sweet and liquid";
    }

};

class chocolate:public milk
{
public:
    chocolate(string pname):milk(pname)
    {}
    virtual void taste()
    {
        cout<< "Iam sweet and solid";
    }
};

class butter:public milk
{
public:
    butter(string cname):milk(cname)
    {}
    virtual const void taste()
    {
    cout<< "Iam sour and solid";
    }
};

int main()
{
    chocolate choc("KitKat");
    cout<<"Hi!!,I am"<<choc.getname()<<choc.taste();//error is here
    butter butt("Amul");
    cout<<"Hi!! Iam "<<butt.getname()<<butt.taste();//also here
    cin.get();
}

在那里,有错误,我应该将虚函数作为指针传递还是它是什么?

4 个答案:

答案 0 :(得分:3)

您的getnametaste函数被声明为返回void,因此您无法在cout语句中调用它们。也许你的意思是让他们返回字符串?

答案 1 :(得分:0)

首先。请缩进您的代码,使其更容易阅读。

其次,您在cout语句中调用void方法。

您的输出应如下所示:

int main()
{
    chocolate choc("KitKat");
    cout<<"Hi!!,I am"<<choc.getname();
    choc.taste();
    butter butt("Amul");
    cout<<"Hi!! Iam "<<butt.getname(); 
    butt.taste();
    cin.get();
}

答案 2 :(得分:0)

将您的main()修改为:

  int main()
  {
    chocolate choc("KitKat");
    cout<<"Hi!!,I am"<<choc.getname();
    choc.taste();
    butter butt("Amul");
    cout<<"Hi!! Iam "<<butt.getname();
    butt.taste();        
    cin.get();
  }

您要将taste()的返回类型声明为void,因此您无法在cout语句中使用它们

答案 3 :(得分:0)

Butter类中函数味道的原型也无效。子类必须保持虚函数的原型不变。

void taste();
{
    cout<< "Iam sour and solid";
}