벡터에서 일부 객체를 Animal의 하위 클래스에 저장하려고했습니다. 구조가되어 슈퍼 클래스 인 Animal
을 가지고 있는데, 서브 클래스로 Reptile
과 Mammal
을 가지고 있습니다. 지금까지는 추상적 인 메소드를 구현 했으므로 이것들은 추상적이어야합니다. Mammal
서브로서 Reptile
및 Dog
및 Cat
서브 예를 들어 C++ 다형성 - 수퍼 클래스에서 서브 클래스 메서드 호출
서브 각각 하나
,Crocodile
및
Lizard
.
I은 다형성을 가지고, 벡터의 std::vector<Animal*>
그들을 저장하고,하지만, 예를 들어 문제 호출을 구비하고, Reptile
하위 클래스이므로, 의미가 Animal
수퍼 클래스 구비하지 않는 Mammal
특이있어서, 그것의.
std::vector<Animal*> _list_animals;
...
_list_animals[0] = new Dog();
_list_animals[0]->foo(); //foo is a virtual method from Animal, so no problems here
_list_animals[0]->bar(); //bar is a method from `Mammal` only, so it can't be called like this
어떻게 캐스팅하지 않고도 그 방법을 사용할 수 있습니까?
이 디자인 냄새입니다. 하위 클래스 별 메서드를 호출해야하는 경우에는 포인터 대 수퍼 클래스의 벡터를 유지 관리해서는 안된다는 것이 논쟁의 여지가 있습니다. –
@ Captain Obvlious 어떻게 그렇게됩니까? – msk
@ Oliver Charlesworth 네가 무슨 말을하는지 이해 하겠지만 컴파일 시간에 저장해야하는 오브젝트의 종류를 알지 못한다. 왜 그런 식으로 사용했는지. 또한, 나는 대부분 수퍼 클래스의 메서드를 사용합니다. – msk