Frage: Klasse - Variablen in Get-Methoden ohne Set-Methoden



  • @Swordfish sagte in Frage: Klasse - Variablen in Get-Methoden ohne Set-Methoden:

    return 0; haben wir so gelernt

    Es ist ja nicht falsch, nur unnötig: [basic.start.main]/5



  • Und noch ergänzend zu @Swordfish Fehlerauflistung:

    Die strings in den Funktionen sollten const string& sein (oder von mir aus copy + move) und dass es keine Setter gibt, aber einen Default-Konstruktor wirkt auch erstmal unsinnig.
    Denglisch ist auch Mist. Insgesamt eine sehr schwache Vorlage von deinem Aufgabensteller.



  • @Swordfish sagte in Frage: Klasse - Variablen in Get-Methoden ohne Set-Methoden:

    @Swordfish sagte in Frage: Klasse - Variablen in Get-Methoden ohne Set-Methoden:

    return 0; haben wir so gelernt

    Es ist ja nicht falsch, nur unnötig: [basic.start.main]/5

    Ich finde es falsch, das überhaupt zu erwähnen. Bei allen anderen Funktionen im Quellcode verzichtet man ja auch nicht auf das explizite aufrufen von "return". Also sollte man sich das auch bei "int main( ... ) " gar nicht erst angewöhnen.
    Da gehört ein "return 0;" ( oder irgendein anderer Returncode ) hin. Punkt.



  • @It0101 "Geschmackssache", sagte der Affe und biss in die Seife.



  • @It0101 Also ich returne EXIT_SUCCESS. Macht es noch etwas klarer.



  • @Tyrdal Super, ein zusätzliches #include und eine Zeile Code mit 0 Effekt. main() läuft bis zum Ende durch? Alles gut und klar genug.



  • Ich streite mich ja gern über fast alles -- aber über return 0; vs. return EXIT_SUCCESS; vs. nix in main streiten ...
    Naja kann man machen, muss man aber nicht 🙂



  • @hustbaer sagte in Frage: Klasse - Variablen in Get-Methoden ohne Set-Methoden:

    Ich streite mich ja gern über fast alles -- aber über return 0; vs. return EXIT_SUCCESS; vs. nix in main streiten ...
    Naja kann man machen, muss man aber nicht 🙂

    Wenn man weiß was man tut, ist der Verzicht auf ein "return" in Ordnung. Ich finde es nur bekloppt, C++-Lernenden völlig grundlos von irgendwelchen möglichen Ausnahmen zu erzählen. Wäre das return ein zehnzeiliger Codeblock würde ich das verstehen, aber wegen einer Zeile Quellcode? come on! Die Spitze der Faulheit. Aus pädagogischer Sicht ist das Unsinn.



  • @It0101 Ja hast eh recht. Ich meinte das auch so ein bisschen in die Richtung. Also dass es von Anfang an nicht sehr sinnvoll war das in der Form zu erwähnen. Also ich finde das OK wenn man es bringt ala "übrigens, fun fact: in C und C++ muss man in main() kein return schreiben, aber nur in main() und keiner weiss so recht wieso es die Spezialregel immer noch gibt aber ist halt so".
    Es als Verbesserungsvorschlag zu bringen halte ich auch für wenig sinnvoll.


  • Mod

    @hustbaer sagte in Frage: Klasse - Variablen in Get-Methoden ohne Set-Methoden:

    @It0101 Ja hast eh recht. Ich meinte das auch so ein bisschen in die Richtung. Also dass es von Anfang an nicht sehr sinnvoll war das in der Form zu erwähnen. Also ich finde das OK wenn man es bringt ala "übrigens, fun fact: in C und C++ muss man in main() kein return schreiben, aber nur in main() und keiner weiss so recht wieso es die Spezialregel immer noch gibt aber ist halt so".
    Es als Verbesserungsvorschlag zu bringen halte ich auch für wenig sinnvoll.

    Das doofe ist ja, in C89 gibt es da keine Sonderregel (auch wenn es zu 99% trotzdem funktionieren wird) und es wäre falsch, das return weg zu lassen.



  • @SeppJ sagte in Frage: Klasse - Variablen in Get-Methoden ohne Set-Methoden:

    Das doofe ist ja, in C89 gibt es da keine Sonderregel (auch wenn es zu 99% trotzdem funktionieren wird) und es wäre falsch, das return weg zu lassen.

    Huch? Ich dachte immer das wäre ne Altlast die von C übernommen wurde. Auf jeden Fall wäre das sowas von einfach zu fixen gewesen (und ist es noch). Der Standard sagt ja eh immer nur "diagnostic required" (wenn überhaupt). Und das ist mit einer Warning erfüllt. D.h. die Compiler müssten lediglich mit Defaut-Switches ne Warning abliefern wenn sie conformant sein wollen - dürften den Code aber weiterhin akzeptieren und weiterhin ein Object-File erzeugen. Und dann hätte man eine sinnlose Sonderregelung weniger im Standard.


  • Mod

    Das ist wirklich eine gute Frage, wieso das so ist. Ich kann keine Antwort dazu finden. Wenn ich mal spekulieren darf: Mit C99 und C++ (die beide jeweils das implizite return 0; einführen) wurde der Rückgabewert von main zwangsweise zu int. In Vorstandardzeiten (und mit ein bisschen kreativer Auslegung auch in C89) war auch void erlaubt. Jetzt hätte diese Änderung vielen an sich sauberen Code kaputt gemacht, bloß wegen einer Standardisierung. So übersetzt aber der alte Code ohne return trotzdem noch (vielleicht mit ein bisschen Gemecker, dass es eigentlich int main lauten sollte) und die Laufzeitumgebung findet trotzdem noch ihren int-Rückgabewert wo sie ihn erwartet.

    Persönlich finde ich das auch recht programmiererfreundlich. Wenn ich selber eine Funktion mit Rückgabewert schreibe, dann denke ich darüber nach, was die Funktion zurückgeben soll. Da vergesse ich garantiert kein return. Bei main wird mir die Signatur aufgezwungen, und die meiste Zeit ist mir völlig Wumpe was die main zurück gibt. Ich muss mich sogar schon halbwegs gut mit Computern auskennen, um überhaupt die Bedeutung des Rückgabewerts von main zu kennen. Und selbst dann ist es mir die meiste Zeit immer noch egal. Da vergesse ich schnell das return (besonders 1989, als mir meine IDE nicht aggressiv den Code vervollständigt hat) aber mein Programm ist ja trotzdem richtig und ich will auch, dass es sich so verhält.



  • @SeppJ Hm. Das macht für mich immer noch keinen Sinn. Wenn ich den Code sowieso anpassen muss (weil ich void auf int ändern muss), dann kann ich auch gleich das return 0 dazuschreiben. Is dann auch schon wörscht.


Log in to reply