我在 C++ 中遇到继承问题。这里我写了一个简单的代码来说明我的问题:
//Animal.h
class Animal
{
public:
Animal();
~Animal();
virtual const void Eat();
};
//Bear.h
class Bear: public Animal
{
public:
Animal();
~Animal();
virtual const void Eat();
};
//Animal.cpp
const void Animal::Eat() {
}
//Bear.cpp
const void Animal::Eat() {
//Do something
}
现在,在另一个类中,我声明了一个应该容纳动物的向量,然后创建一个Bear
并将其推入我的向量中:
std::vector<Animal> a;
Bear b;
a.push_back(b);
现在的问题是,当我遍历我的动物向量并尝试调用Eat()
时,会调用基类(动物)的 Eat 方法,但不会调用该Bear
Eat
方法。
即使尝试dynamic_cast it
也不起作用:dynamic_cast
失败
dynamic_cast<Bear*>(&a.at(0));
我究竟做错了什么?是因为我缺少复制构造函数吗?