Was ist die richtige Verwendung für dynamic_cast?

Ich viele Male gesagt habe (und gesehen, die mich in der Praxis), dass die Verwendung von dynamic_cast bedeutet oft schlechtes design, weil es kann und sollte ersetzt werden, mit virtuellen Funktionen.

Betrachten Sie beispielsweise den folgenden code:

class Base{...};
class Derived:public Base{...};
...
Base* createSomeObject(); //Might create a Derived object
...
Base* obj = createSomeObject();
if(dynamic_cast<Derived*>(obj)){
 //do stuff in one way
}
else{
//do stuff in some other way
}

Es kann leicht gesehen werden, dass anstelle des Schreibens dynamische casts können wir nur hinzufügen, um eine virtuelle Funktion doStuff() zu Base - und re-Implementierung in Derived.

In diesem Fall, meine Frage ist, warum haben wir dynamic_cast in die Sprache überhaupt? Gibt es ein Beispiel, in dem die Verwendung von dynamic_cast gerechtfertigt ist?

InformationsquelleAutor | 2011-04-25
Schreibe einen Kommentar