Я пытаюсь заполнить вектор производными классами животных (Dog, Cat и т. Д.). Когда я вынимаю содержимое вектора, я хочу опустить их обратно к производным классам.Полиморфизм C++: повышение/перетаскивание и контейнеры базового класса, отсутствующие данные
После выполнения dog.setLegs (4), я возвращаю правильное количество ног с помощью getLegs(). Однако, возвращая объект Animal из вектора животных и отбрасывая его обратно на тип Dog, mydog-> getLegs() возвращает мне 0 вместо 4, как я и ожидал.
Я думаю, что я делаю что-то неправильно здесь, но я не уверен, что. Может ли кто-нибудь помочь мне в этом? Благодаря!!
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;
}
Почему не ваш базовый класс абстрактным? –