Итак, у меня есть простое задание. Есть 3 класса, полученные из одного базового класса. Они довольно просты и будут представлены ниже.
Мне нужно создать новый класс с именем PolymorphicAnimal
, который будет вести себя так же, как любой другой animal
, производный от базового класса Animal
.
Чтобы быть точным, все, что им нужно сделать, это отобразить правильный текст после вызова метода SoundOff
. Я предполагаю, что мне нужно использовать dynamic_cast
здесь. Мой вопрос заключается в том, каков правильный синтаксис для использования dynamic_cast
в качестве оператора if
, и все ли производные классы должны иметь хотя бы один виртуальный метод?
#include "stdafx.h"
#include <iostream>
#include <string>
class Animal {
public:
virtual std::string SoundOff() = 0;
};
class Dog : public Animal {
std::string SoundOff() override { return "Woof"; }
};
class Cat : public Animal {
std::string SoundOff() override { return "Meow"; }
};
class Cow : public Animal {
std::string SoundOff() override { return "Muu"; }
};
class PolymorphicAnimal : public Animal {
std::string sound;
public:
PolymorphicAnimal(const Animal &a) {
if(std::dynamic_cast<Cat*>(a))
}
};
Строка if(std::dynamic_cast...
генерирует ошибки компилятора:
syntax error '<', illegal token on the right side of ::
и expected an identifier