Angenommen, ich bin eine C++ - Bibliothek voller Vererbung gegeben. Ich habe eine Base*
in einer Funktion, wenn ich weiß, dass es tatsächlich auf ein Derived
Objekt zeigt und Derived
erbt Base
. Aber ich weiß nicht, welche Art von Vererbung es ist (öffentlich/geschützt/privat). Ich weiß auch nicht, ob es irgendeine virtuelle Funktion in der Hierarchie gibt.static_cast vs dynamic_cast
diese Situation gegeben, ohne den Quellcode/Dokumentation suchen in von Base
und Derived
, die verwenden werfen sollte ich? Oder sollte ich zuerst den Code/die Dokumentation konsultieren, um Polymorphie zu gewährleisten?
Hintergrund
I 4.7 changeEvent
Funktion von QMainWindow
in Qt schreibe. Die changeEvent
Funktion nimmt QEvent*
, die ich auf andere Art durch Wissen QEvent::type()
werfen kann. Ich habe mich gefragt, ob ich static_cast
oder dynamic_cast
verwenden sollte.
Danke.
Wenn eine Bibliothek, die Sie verwenden, eine 'geschützte' Vererbung verwendet, ist es an der Zeit, eine bessere geschriebene Bibliothek zu finden. –
Diese Frage könnte helfen: http://stackoverflow.com/questions/28002/regular-cast-vs-static-cast-vs-dynamic-cast –
@Zac: Ich wünschte, ich könnte Kommentare ablehnen. Wie können Sie möglicherweise beurteilen, ob die geschützte Vererbung das richtige Werkzeug für den Job ist, wenn Sie nicht wissen, was diese Bibliothek tut? – Puppy