상속으로 가득 찬 C++ 라이브러리가 있다고 가정합니다. 실제로 Derived
개체를 가리키고 Derived
이 Base
을 상속 받았다는 것을 알았을 때 함수에 Base*
이 주어졌습니다. 하지만 어떤 종류의 상속 (public/protected/private)인지는 알 수 없습니다. 또한 계층 구조에 가상 함수가 있는지 여부도 알 수 없습니다.static_cast 대 dynamic_cast
내가 사용해야 캐스트 소스 코드/문서 Base
및 Derived
의로 보지 않고이 상황, 을 감안할 때? 또는 다형성에 대한 보장을 위해 먼저 코드/문서를 참조해야합니까?
배경
내가 Qt를 4.7에서 QMainWindow
의 changeEvent
기능을 쓰고 있어요. changeEvent
함수는 QEvent*
이 걸리므로 QEvent::type()
을 알면 다른 형식으로 변환 할 수 있습니다. static_cast
또는 dynamic_cast
을 사용해야하는지 궁금 해서요.
감사합니다.
만약 당신이 사용하는 라이브러리가'protected' 상속을 사용한다면, 더 좋은 라이브러리를 찾을 때입니다. –
이 질문은 도움이 될 수 있습니다 : http://stackoverflow.com/questions/28002/regular-cast-vs-static-cast-vs-dynamic-cast –
@ Zac : 소원 나는 의견을 downvote 수 있습니다. 해당 라이브러리가 무엇인지 모르는 경우 보호 된 상속이 해당 작업에 적합한 도구인지 여부를 어떻게 판단 할 수 있습니까? – Puppy