Я пытаюсь использовать и изучать виртуальные функции, но моя первая попытка - беспорядок. Я новичок, иди ко мне. Код довольно прямолинейный.
#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();
}
Там были ошибки, следует ли передавать виртуальные функции в качестве указателей или что это такое?
getname
функции getname
и taste
void
, поэтому вы не можете вызвать их в середине инструкции cout
. Возможно, вы хотели, чтобы они возвращали строки?
Измените свой 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
В первую очередь. Пожалуйста, отпечатайте свой код, это делает его намного легче читать.
Во-вторых, вы вызываете метод void внутри инструкции cout.
Ваш вывод должен выглядеть следующим образом:
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();
}
Прототип вкуса функции в классе Butter также недействителен. Детский класс должен сохранять прототип виртуальной функции без изменений.
void taste();
{
cout<< "Iam sour and solid";
}
#include <string>
а не<string.h>
; Первый - это заголовок C ++, а второй - заголовок C.