Ist OOP in C++ eigentlich noch guter Stil?


  • Mod

    Meine Güte! Seid ihr wirklich alle nicht in der Lage, Pseudocode zu erkennen, wenn er euch ins Gesicht springt? Hätte ich

    Schleife über alle Bürger
    BEGIN
      tu was
    END
    

    schreiben müssen?



  • Wenn man fuer jede Einheit einen extra Container hat, dann wird es sehr umstaendlich, neue Einheiten hinzuzufuegen.



  • @SeppJ
    Wenn man was schreibt was gültiger C++ Code ist (oder fast, abgesehen von Trivialitäten), dann wäre net schlecht wenn er auch Sinn macht/funktioniert. Weil er dann vermutlich schnell als konkretes Beispiel verstanden wird.
    Und dann fehlt da nach dem auto ein & .
    Weil sonst immer nur eine Kopie des Bürgers & Soldaten modifiziert wird, was ja nicht Sinn der Sache ist.

    @Sone
    Statt nur aufzeigen wo was falsch ist/fehlt/... könntest du vielleicht auch gleich dazuschreiben was. Das wäre sinnvoll. Im Gegensatz zu nur rummoppeln dass irgendwas nicht passt, ohne zu sagen was. Was dann halt nicht so sinnvoll ist.


  • Mod

    hustbaer schrieb:

    @SeppJ
    Wenn man was schreibt was gültiger C++ Code ist (oder fast, abgesehen von Trivialitäten), dann wäre net schlecht wenn er auch Sinn macht/funktioniert. Weil er dann vermutlich schnell als konkretes Beispiel verstanden wird.
    Und dann fehlt da nach dem auto ein & .
    Weil sonst immer nur eine Kopie des Bürgers & Soldaten modifiziert wird, was ja nicht Sinn der Sache ist.

    Und das ändert inwiefern etwas am Sinn des Beispiels? Ist doch vollkommen egal, ob das Original oder eine Kopie angefasst wird, weil überhaupt nicht klar ist, was überhaupt gemacht wird. Eine Kopie kann genau so richtig sein, je nach Aufgabenstellung. Punkt ist: Es wird über alle Objekte iteriert. Das ist wichtig. Das wird mit möglichst wenig Syntaxballast vorgeführt.

    Wer da krampfhaft ein '&' vermisst, der weiß sowieso dass da eines hin sollte/könnte. Der soll sich dann bitte auch beschweren, dass der Code nicht im Blockscope ist, dass Umlaute nicht erlaubt sind, #include<vector> fehlt und keine einzige der Klassen und Funktionen deklariert ist. Wenn ihm dann noch nicht aufgefallen ist, was der Unterschied zwischen echtem Code und Vorführbeispielen ist, dann ... ach keine Ahnung. Dann ist er eben einfach zu dumm. Das sind diese Schnösel, wegen denen man hier keinerlei Antworten geben kann, ohne 80% des Textes damit zu verschwenden, alle Sonderfälle aufzuzählen, in denen eine gemachte Aussage (also die eigentliche Antwort auf eine Frage) vielleicht doch nur bedingt gelten könnte.



  • Statt nur aufzeigen wo was falsch ist/fehlt/... könntest du vielleicht auch gleich dazuschreiben was. Das wäre sinnvoll. Im Gegensatz zu nur rummoppeln dass irgendwas nicht passt, ohne zu sagen was. Was dann halt nicht so sinnvoll ist.

    Und du, meine holder hustbaer in der Ferne, hast gleich, um den Kontrast aufzuzeigen, eine volle Erklärung abgeliefert*, damit selbst SeppJ, der bekanntlich etwas langsam ist</ironie>, kapiert, wo sein halb-pseudocode-halb-kompilierbarer-code-Mischmasch eine Macke hat. 👍

    ~*Du bist einfach ein so viel besserer Mensch als ich, dass ich jeden Tag aufs neue nicht fassen kann, wie du es schaffst die Energie aufzubringen mir noch zu erklären was ich (so tollpatschig und faul ich nun einmal bin), "[..] mal wieder, leider", versaut habe.~

    Edit: Ohne hier etwas ausarten zu lassen, entschuldige ich mich für meine völlig inadäquate Bemerkung, das war wirklich überflüssig, es tut mir Leid. Bitte nicht meinetwegen Off-Topic geraten, war meine Schuld. 👎 (Lösche die Diskussion ab meinem Post einfach weg)



  • SeppJ schrieb:

    hustbaer schrieb:

    @SeppJ
    Wenn man was schreibt was gültiger C++ Code ist (oder fast, abgesehen von Trivialitäten), dann wäre net schlecht wenn er auch Sinn macht/funktioniert. Weil er dann vermutlich schnell als konkretes Beispiel verstanden wird.
    Und dann fehlt da nach dem auto ein & .
    Weil sonst immer nur eine Kopie des Bürgers & Soldaten modifiziert wird, was ja nicht Sinn der Sache ist.

    Und das ändert inwiefern etwas am Sinn des Beispiels? Ist doch vollkommen egal, ob das Original oder eine Kopie angefasst wird, weil überhaupt nicht klar ist, was überhaupt gemacht wird. Eine Kopie kann genau so richtig sein, je nach Aufgabenstellung. Punkt ist: Es wird über alle Objekte iteriert. Das ist wichtig. Das wird mit möglichst wenig Syntaxballast vorgeführt.

    Wer da krampfhaft ein '&' vermisst, der weiß sowieso dass da eines hin sollte/könnte.

    Es geht doch genau um die Leute die das nicht wissen bzw. nicht auf den ersten Blick sehen. Und es dann so abschreiben. Und sich dann wundern dass es nicht tut was es sollte.

    Der soll sich dann bitte auch beschweren, dass der Code nicht im Blockscope ist, dass Umlaute nicht erlaubt sind, #include<vector> fehlt und keine einzige der Klassen und Funktionen deklariert ist.

    Bis auf die Umlaute sind das alles übliche Dinge bei Beispiel-Code. Aber Beispiel-Code != Pseude-Code.

    Wenn ihm dann noch nicht aufgefallen ist, was der Unterschied zwischen echtem Code und Vorführbeispielen ist, dann ... ach keine Ahnung.

    Ehm.
    Anfänger?

    Ich weiss auch nicht warum du dich so aufregst. Klar, es geht hier um "nix". Aber trotzdem werd ich wohl noch meine Meinung schreiben dürfen.



  • @Sone
    Dir hat's grad komplett die Kette ausgehängt, oder?

    Erklär mir mal: was bitte bringt es zu schreiben "das ist falsch", wenn man damit nicht entweder
    a) Etwas korrigieren/richtigstellen will
    oder
    b) Jemandem ans Bein pinkeln will
    oder
    c) Sich blöd wichtig machen will
    ?

    Falls dein Beweggrund (a) gewesen sein sollte, dann fehlt für mich schon irgendwie die Info was eigentlich das Problem ist. Ich meine für wen schreibt man sowas - für Leute die es selbst schon wissen? Eher nicht...

    Und falls doch eher (b) oder (c), dann halt gefälligst einfach die Fresse.
    Bzw. halt überhaupt die Fresse, du nervst.



  • knivil schrieb:

    Wenn man fuer jede Einheit einen extra Container hat, dann wird es sehr umstaendlich, neue Einheiten hinzuzufuegen.

    Wieso?
    Kann man leicht über eine Überladene Funktion bzw. ein spezialisiertes Template dispatchen.

    Oder meinst du Einheiten-Typen?

    Auch da sehe ich nicht wirklich ein Problem.
    Im Prinzip kann man alle Operationen die man auf allen Einheiten ausführen will über ein "Mach-das-für-alle-Einheiten" Template dispatchen.

    Man gewinnt damit vermutlich keinen Schönheitswettbewerb, aber "sehr umstaendlich" halte ich für übertrieben.



  • hustbaer schrieb:

    @Sone
    Dir hat's grad komplett die Kette ausgehängt, oder?

    Nein.

    Falls dein Beweggrund (a) gewesen sein sollte

    Ja, das war er.

    , dann fehlt für mich schon irgendwie die Info was eigentlich das Problem ist.

    Mir nicht. Wieso? Weil der Fehler für die Zielgruppe offensichtlich ist:

    Ich meine für wen schreibt man sowas - für Leute die es selbst schon wissen? Eher nicht...

    Sieh' dir meinen ersten Post an. Damit wollte ich ausdrücken, dass mir nicht genau klar war, wie SeppJs Code gemeint war (zu wenig von beidem, um es klar zuzuordnen). Der zweite war nur an den Kerl gerichtet, der irgendwie die hier nicht so wichtigen Umlaute ins Spiel brachte, kann also getrost ignoriert werden. Mit dem zweiten war auch nur gesagt, dass mir der Fehler für korrekt-gemeinten Code zu groß war.
    Und der Dritte kam aus meiner Abneigung, deinen nicht sehr toleranten Kommentaren ernste Aufmerksamkeit zu schenken, wie ausnahmsweise mal bei diesem hier.
    Dein erster Post spiegelt eigentlich gut wider, was in mir vorging: Sein Code war irgendwie zu korrekt, um Pseudocode zu sein. Im Endeffekt ist es egal, es war nur ein kleiner Code-Schnipsel der dank mir und dir zu einer völlig überflüssigen Diskussion mit weiteren Beleidigungen und Posts geführt hat. Und wenn du doch so viel intelligenter mit der Situation umgehen kannst, dann tu' das, und damit mir und den anderen einen Gefallen.

    Und falls doch eher (b) oder (c), dann halt gefälligst einfach die Fresse.
    Bzw. halt überhaupt die Fresse, du nervst.

    🙂 Nein. Deal with it.



  • @Kolonist

    Wie willst du verhindern dass jemand Blödsinn der Form Spielfigur.health = -4 macht. Minimale Kopplung, maximale Kohäsion sagt ich dazu. Und eindeutige Zuordnung von Verantwortlichkeiten an Klassen. Ich weis nicht wie man dies mit Template machen sollte.



  • Sone schrieb:

    Mir nicht. Wieso? Weil der Fehler für die Zielgruppe offensichtlich ist:

    Was soll denn jetzt bitte der "Fehler" gewesen sein? Ernsthaft das von Hustbär angesprochene Kopieren des Containerinhalts über die Schleife? WTF? Was soll daran denn falsch sein?



  • Und falls doch eher (b) oder (c), dann halt gefälligst einfach die Fresse.
    Bzw. halt überhaupt die Fresse, du nervst.

    Wie ich laut lachen musste. 😃

    On Topic: Vielleicht enthält der Container auch Zeiger, weil dort gar nicht primär die Daten gehalten werden oder weil dort unique_ptr oder sogar shared_ptr drin sind. Die Definition ist schließlich nicht beigefügt. 😉

    Edit: Ups, die Definition ist doch dabei. Aber vll ist Bürger ja ein typedef Bürgerlein* Bürger; oder so. Na ja, egal...

    Das einzige Problem, was ich sehe, ist, dass so ein Anfänger den Codeschnippsel tatsächlich einfach übernimmt und dann nicht versteht, wieso das nicht javalike funktioniert. Aber wenn OP die gesamte dynamische Polymorphie hinterfragt, wird er wohl über die Stufe heraus sein => Gefahr wohl nicht gegeben (außer für andere Gastleser, aber was soll's).

    Legt euch lieber in die Sonne bei dem schönen Wetter! 🕶



  • ranzige kräuterquark schrieb:

    Sone schrieb:

    Mir nicht. Wieso? Weil der Fehler für die Zielgruppe offensichtlich ist:

    Was soll denn jetzt bitte der "Fehler" gewesen sein? Ernsthaft das von Hustbär angesprochene Kopieren des Containerinhalts über die Schleife? WTF? Was soll daran denn falsch sein?

    Das war nicht zwangsläufig ein Fehler, es war halt nur eine für die meisten Fälle falsche Anwendung. (Für mich daher ein Fehler)

    Legt euch lieber in die Sonne bei dem schönen Wetter!

    Mach ich jetzt. Super Wetter, da hast du Recht. 🙂

    Edit:

    typedef Bürgerlein* Bürger;

    Bei C++11 wohl eher mit alias-Deklaration.


Anmelden zum Antworten