[SOLVED] C++11 (G++) - override erzwingen?



  • Hey,

    gibt es für den g++ Compiler einen Weg beim überschreiben von virtuellen Methoden eine Warnung anzuzeigen, wenn man das c++11 Schlüsselwort override vergessen hat?

    So nach dem Motto:

    class A
    {
      virtual void foo(){}
    };
    
    class Correct : public A
    {
      void foo() override {} // OK
    };
    
    class WithWarning : public A
    {
      void foo() {} // hier wird eine warnung angezeigt
    };
    

    grüße, Robert

    PS: Um externe Bibliotheken mache ich mir keine Sorgen, da ich -isystem anstatt -I verwende.

    Edit: Nicht zwingend notwendige virtual s aus ästhetischen Gründen entfernt

    Edit2: fehlende : public A hinzugefügt

    Edit3: Thread als Solved markiert



  • Du kannst das virtual bei override weglassen.
    Aber ich bezweifle, das das mit der Warnung so einfach geht.



  • Nathan schrieb:

    Du kannst das virtual bei override weglassen.

    Du kannst das virtual auch ohne das override weg lassen, das macht es trotzdem nicht hübscher. 😉



  • Finde ich schon, dass es das hübscher macht. :p
    Oder wenigstens übersichtlicher
    Außerdem stimmt meine Aussage doch: Bei override kann man das weglassen. Ich sagte ja nicht, nur bei override kann man das weglassen. 😃



  • Bevor die Diskussion noch offtopic wird, habe ich die virtual s schnell mal entfernt 🙄



  • Warum offtopic? Deine Frage wurde doch schon beantwortet: Geht nicht, gibt's nicht. Falls du das nicht glauben willst, lies halt einfach die Doku: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
    ctrl+f "override" kommt nur an 3 Stellen vor, und keine davon hat was mit override zu tun.

    Und mit virtual war's schöner. Die sollen lieber mal einbauen dass gewarnt wird, wenn da kein virtual vor steht. 😉



  • cooky451 schrieb:

    Und mit virtual war's schöner. Die sollen lieber mal einbauen dass gewarnt wird, wenn da kein virtual vor steht. 😉

    Bei mir sagt "virtual" nur "Die hier darfst Du als Erbe ruhig überschreiben, das ist so vorgesehen". Und wenn ich es weglasse, heißt das "Kann mir echt nicht vorstellen, warum Du die überschreiben magst, denk bitte nochmal darüber nach".



  • /ONTOPIC:

    cooky451 schrieb:

    Falls du das nicht glauben willst, lies halt einfach die Doku: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
    ctrl+f "override" kommt nur an 3 Stellen vor, und keine davon hat was mit override zu tun.

    Bist du dir 100%-ig sicher, dass die Liste komplett ist? Folgende Warnung kommt nämlich auch nicht in der Liste vor:

    -Woverloaded-virtual
    


  • http://linux.die.net/man/1/g++

    man page kennt da auch nichts.



  • SilentRob schrieb:

    Bist du dir 100%-ig sicher, dass die Liste komplett ist?

    Jetzt wo du es erwähnst, GNU hatte es noch nie so mit dem Dokumentieren. 🤡



  • ichbinsisyphos schrieb:

    http://linux.die.net/man/1/g++

    man page kennt da auch nichts.

    Ok, vielen dank. Vll sollte ich ein feature request dafür erstellen.

    /OFFTOPIC:

    cooky451 schrieb:

    Und mit virtual war's schöner. Die sollen lieber mal einbauen dass gewarnt wird, wenn da kein virtual vor steht. 😉

    Lol, bin gerade über ein Feature Request gestolpert, das sich genau das wünscht:
    http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31397



  • volkard schrieb:

    cooky451 schrieb:

    Und mit virtual war's schöner. Die sollen lieber mal einbauen dass gewarnt wird, wenn da kein virtual vor steht. 😉

    Bei mir sagt "virtual" nur "Die hier darfst Du als Erbe ruhig überschreiben, das ist so vorgesehen". Und wenn ich es weglasse, heißt das "Kann mir echt nicht vorstellen, warum Du die überschreiben magst, denk bitte nochmal darüber nach".

    Drum bin ich auch fürs davorschreiben. Denn vom Erben kann auch eine weitere Klasse erben, und für die gilt ein geerbtes virtual auch, selbst wenn es beim ersten Erben nicht davorsteht.



  • Belli schrieb:

    volkard schrieb:

    cooky451 schrieb:

    Und mit virtual war's schöner. Die sollen lieber mal einbauen dass gewarnt wird, wenn da kein virtual vor steht. 😉

    Bei mir sagt "virtual" nur "Die hier darfst Du als Erbe ruhig überschreiben, das ist so vorgesehen". Und wenn ich es weglasse, heißt das "Kann mir echt nicht vorstellen, warum Du die überschreiben magst, denk bitte nochmal darüber nach".

    Drum bin ich auch fürs davorschreiben. Denn vom Erben kann auch eine weitere Klasse erben, und für die gilt ein geerbtes virtual auch, selbst wenn es beim ersten Erben nicht davorsteht.

    Und deswegen bin ich nicht fürs automatiwsche davorschreiben, denn es kann sein, daß die Erben des Erben sie nicht mehr überschreiben sollen, obwohl sie rein technisch noch virtual ist.



  • Ich schreib in abgeleiteten Klassen nur noch override, nicht mehr virtual.
    Mit virtual kann man noch denken, da wird eine neue Funktion eingeführt, meiner Meinung nach.



  • volkard schrieb:

    Und deswegen bin ich nicht fürs automatiwsche davorschreiben, denn es kann sein, daß die Erben des Erben sie nicht mehr überschreiben sollen, obwohl sie rein technisch noch virtual ist.

    Dafür gibt's aber final. :p

    Nathan schrieb:

    Ich schreib in abgeleiteten Klassen nur noch override, nicht mehr virtual.

    Ich muss zugeben, wenn man override und final hat, wird virtual ein wenig redundant. Mal sehen, vielleicht steige ich um.


Log in to reply