015
21.08.2003, 15:54 Uhr
0xdeadbeef
Gott (Operator)
|
Um nochmal auf die Fragen einzugehen - Mit dieser Funktionspointer-Geschichte läufst du in Gefahr, Code aufzurufen, wo keiner ist. Nimm folgendes Beispiel (Objekt sei definiert wie in virtuals Beispiel):
C++: |
Objekt instanz; instanz.funkt(); //<-- Hoppla, da ist ja noch gar keine Funktion zugewiesen
|
Das ist etwas, was du mit virtuellen Methoden nicht hast. Oder stell dir eine Situation vor, in der es für eine Funktion nur sinnvoll ist, eine ganz bestimmte Funktion zu benutzen. Bei deinem Ansatz hast du keine Möglichkeit, dass nachzuprüfen, mit virtuellen Funktionen nimmst du einfach direkt die abgeleitete Klasse an. Oder stell dir vor, du willst this in der Funktion verwenden. Mit virtuellen Methoden kein Problem, bei deinem Ansatz musst du dich darauf verlassen, dass der Programmierer begreift, dass er gerade mit etwas völlig C++-atypischem arbeitet und das Objekt sich selbst übergibt. Solcher Code:
C++: |
instanz.do_something(&instanz, param1, param2);
|
sollte eigentlich der Vergangenheit angehören. Es gibt tausende von Beispielen wie diese. Und wenn du tatsächlich mal Funktionen eines Objektes zur Laufzeit austauschen musst, dann nimm wenigstens Funktoren dafür. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 21.08.2003 um 15:55 Uhr von 0xdeadbeef editiert. |