Sinn von final und override in C++11



  • hustbaer schrieb:

    Das ist auch keine akademische Sache, diese Probleme sind ganz real. Änder (*) 'mal eine virtuelle Funktion in einer von vielen Projekten genutzten Basisklasse (u.U. Projekte deren Code du nicht mal hast, weil du bloss eine Open Source Library entwickelst, und nicht mal weisst wer die alles verwendet). Und dann stell sicher dass alle Programme die diese Funktion überschreiben die Änderung mit machen.
    Da es ohne "override" keinen Weg gibt das sicherzustellen ist das ein Ding der unmöglichkeit. Der Fehler wird nicht beim Kompilieren gemeldet, sondern taucht erst irgendwann zur Laufzeit auf. Wenn das ganze nur einen selten genutzten Codepfad betrifft, oder die sich daraus ergebenen Fehler so subtil sind dass man nicht sofort beim 1. Testlauf aufmerksam wird, dann viel Spass beim Fehlersuchen.

    Es sei denn, man baut nur flache Hierarchien, wo jede virtuelle Funktion einer Basisklasse pur-virtuell ist. Im Fehlerfall, also wenn man die Funktionen versehentlich nicht überschreibt, würde der Compiler beim Instanziieren der Objekte meckern, weil es noch die eine oder andere pur-virtuelle Funktion in der Klasse gibt.

    Wenn ich mal was mit virtuellen Funktionen mache, sieht das meistens so aus wie oben beschrieben, so dass ich "override" gar nicht brauche, um diese Fehler abzufangen.

    Ich find's aber trotzdem gut, dass man sich als Programmierer mit "override" klarer ausdrücken kann.



  • Stimmt schon.
    Manchmal sind aber virtuelle nicht-pure Funktionen einfach die sinnvollere Wahl, und dann braucht man eben override.


Anmelden zum Antworten