2014-10-25 5 views
0

벡터에서 일부 객체를 Animal의 하위 클래스에 저장하려고했습니다. 구조가되어 슈퍼 클래스 인 Animal을 가지고 있는데, 서브 클래스로 ReptileMammal을 가지고 있습니다. 지금까지는 추상적 인 메소드를 구현 했으므로 이것들은 추상적이어야합니다. Mammal 서브로서 ReptileDogCat 서브 예를 들어 C++ 다형성 - 수퍼 클래스에서 서브 클래스 메서드 호출

서브 각각 하나

, CrocodileLizard.

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 

어떻게 캐스팅하지 않고도 그 방법을 사용할 수 있습니까?

+4

이 디자인 냄새입니다. 하위 클래스 별 메서드를 호출해야하는 경우에는 포인터 대 수퍼 클래스의 벡터를 유지 관리해서는 안된다는 것이 논쟁의 여지가 있습니다. –

+0

@ Captain Obvlious 어떻게 그렇게됩니까? – msk

+0

@ Oliver Charlesworth 네가 무슨 말을하는지 이해 하겠지만 컴파일 시간에 저장해야하는 오브젝트의 종류를 알지 못한다. 왜 그런 식으로 사용했는지. 또한, 나는 대부분 수퍼 클래스의 메서드를 사용합니다. – msk

답변

0

코드 구조의 재 설계로 인해이 문제가 발생하지 않는 것이 최선의 선택입니다. 그러나 만약 당신이 이런 식으로 일을 주장하는 경우에 StackOverflow에이 대답을 참조하십시오

Subclass Methods

관련 문제