Detlef W. schrieb:
> Und das ist etwas was für mich an C++ nicht so schön ist. Einiges
> funktioniert nicht wie man es von der Logik her erwarten würde. Wenn ich
> eine Ableitung erstelle und diese instaziere, erwarte ich - rein von der
> Logik her - das die Instanz zuerst auf die Daten und Methoden der
> Ableitung zugreift und erst wenn sie dort nicht verfügbar sind auf die
> Elternklasse.
C++ verfolgt das Prinzip, dass man nur für das bezahlt, was man braucht.
Die Basisklasse soll und kann nicht alle Ableitungen kennen. (z.B. weil
diese in einer Bibliothek ist, die Ableitungen aber im Projekt, das die
Bibliothek nutzt).
Um das von dir erwartete Verhalten zu haben, müsste die Basis zur
Laufzeit prüfen, ob es in der Ableitung eine überschriebene Variante
gibt. Dies kostet aber Rechenzeit. Wenn man dieses Verhalten explizit
haben möchte, dann kann man es mit virtual anfordern.
Detlef W. schrieb:
> Da ich darauf hingewiesen wurde außerden besser Smartpointer zu
> verwenden, wie schlägt das beim Speicherverbrauch (Flash / RAM) zu
> Buche? Da die Bibliothek auch auf MCs laufen soll, bin ich was das
> angeht sehr Vorsichtig.
Für Einsteiger ist es in C++ tatsächlich schwer zu erkennen, wie teuer
ein Stück Code tatsächlich ist. Zum Beispiel wirst du in deinem
ursprünglichen Code nach dem Compiliern auch den Konstruktor von Basis
und Ableitung nicht mehr finden, weil es nichts zu initialisiern gibt,
auch keinen v-table.