Почему вместо этого вызывается метод Mammal speak
?Виртуальный метод не переопределяется?
int main() {
Mammal mammal = Cat("CatName", Blue, 9);
mammal.speak();
}
class Mammal : public Animal{
public:
virtual void speak() const {
cout << "Mammal speaks" << endl;
}
};
class Cat : public Mammal {
public:
void speak() const {
cout << "Cat meow!" << endl;
}
};
не должно быть, «Mammal * mammal = new Cat();' –
Отключение конструктора копирования и оператора присваивания полиморфных классов может помочь предотвратить эти ошибки. –