Что не так со следующим кодом;

0

Я пытаюсь использовать и изучать виртуальные функции, но моя первая попытка - беспорядок. Я новичок, иди ко мне. Код довольно прямолинейный.

#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();
}

Там были ошибки, следует ли передавать виртуальные функции в качестве указателей или что это такое?

  • 2
    Какие ошибки вы получаете? Кроме того, ваша модель наследования немного странная, но это нормально.
  • 0
    Вы уверены, что этот код скомпилирован? Вам нужно #include <string> а не <string.h> ; Первый - это заголовок C ++, а второй - заголовок C.
Теги:

4 ответа

3
Лучший ответ

getname функции getname и taste void, поэтому вы не можете вызвать их в середине инструкции cout. Возможно, вы хотели, чтобы они возвращали строки?

  • 0
    Спасибо, ребята, это было круто. И да, я хотел, чтобы они возвращали строки.
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

0

В первую очередь. Пожалуйста, отпечатайте свой код, это делает его намного легче читать.

Во-вторых, вы вызываете метод 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();
}
0

Прототип вкуса функции в классе Butter также недействителен. Детский класс должен сохранять прототип виртуальной функции без изменений.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню