私は、派生クラスの動物(犬、猫など)でベクターを埋めようとしています。ベクトルの内容を取り出すとき、私はそれらを派生クラスにダウンキャストする必要があります。C++ polymorphism:アップキャスト/リバースキャスティングと基底クラスのコンテナ、欠落データ
dog.setLegs(4)を実行した後、getLegs()で正しい数の脚を取り戻しています。しかし、動物のベクトルからAnimalオブジェクトを取り戻し、それをDog型にキャストした後、mydog-> getLegs()は私が予想したように4ではなくmeを返します。
私はここで何か間違っていると思いますが、私は何がわかりません。誰も私にこれを助けることができますか?ありがとう!!
class Animal{
};
class Dog : public Animal {
public:
void setLegs(int newLegs){legs = newLegs;};
int getLegs(){return legs;};
protected:
int legs=0;
};
int main(int argc, char* argv[]){
Dog dog;
dog.setLegs(4);
std::cout<<dog.getLegs()<<std::endl;
std::vector<Animal> animals;
animals.push_back(dog);
Dog *mydog = (Dog*) &(animals[0]);
std::cout<<mydog->getLegs()<<std::endl;
return 0;
}
なぜ、あなたのベースクラスの抽象的ではないのですか? –