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));
私は何が間違っているのですか?コピーコンストラクタがないからですか?