我正在尝试使用和学习虚拟功能,但我的第一次尝试是一团糟。我是个新手,对我很轻松。代码很简单。
#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();
}
在那里,有错误,我应该将虚函数作为指针传递还是它是什么?
答案 0 :(得分:3)
您的getname
和taste
函数被声明为返回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";
}