Julila
@Julila
вечный студент / german version

Как изменить код, что бы пример работал?

Привет всем. У меня есть два класса
class Audioformat {
public:

    string titel() { return ""; }
    string info()  { return ""; }
};

int mp3_counter = 0;

class MP3_Format : public Audioformat {
public:
    
    string titel() { return  song; }
    string info()  { return "MP3"; }

private:
    string song;
};


и тест:
bool test_A1_a() {
#ifdef A1_a
	Audioformat * af = new MP3_Format("Hey Joe");
	string info = af->info();
	string absp = af->titel();
	return (info == "MP3" && absp == "Hey Joe");
#else
	return false;
#endif
}


Что надо изменить в классе MP_3 , что бы код работал.
Сейчас
string info = af->info();
string absp = af->titel();
возвращают с класса Audioformat результат
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
1. Название -- это title, а не titel
2. За каждым new должен следовать delete. Лучше обернуть Audioformat* в std::unique_ptr, который делает delete сам:
#include <memory>
std::unique_ptr<Audioformat> af(new Audioformat(""));
af->info(); af->title();
// Не нужен delete :D

3. Методы, которые можно вызывать через указатель на базовый класс, должны быть объявлены как virtual. Если содержание методов базового класса не имеет смысла (как здесь), то лучше объявить как чисто виртуальные:
class Audioformat {
public:
    virtual string info() = 0;
};
class MP3_Format : public Audioformat {
public:
    string info() override { return "MP3"; }
};

override не обязателен, но крайне желателен.
4. Виртуальный деструктор:
class Audioformat {
public:
    virtual ~Audioformat() {}
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽