C+ statt C++



  • Können wir uns also darauf einigen, daß das benutzen zweier verschiedener Schlüsselwörter für denselben Zwecke(Klasse definieren) und unter der Voraussetzung, daß die beiden für gewöhnlich eine unterschiedliche Absicht Wiederspiegeln(struct - POD, class - Klasse) irreführend und damit bescheuert ist?

    MfG Jester



  • Jester schrieb:

    Können wir uns also darauf einigen, daß das benutzen zweier verschiedener Schlüsselwörter für denselben Zwecke [...] irreführend und damit bescheuert ist?

    JAAAAAAAAA !!!

    @kingruedi:

    ich programmiere nun schon lange genug um damit keine probleme zu haben, aber anderen geht das bestimmt so. und es ist nunmal eine allgemeingültige moral, die habe ich nicht erfunden, aber es gibt sie und man sollte sich weitgehend daran halten.



  • Cool, ein Streit über den PErsönlichen Geschmack. Das wir wieder interessant.

    Ich verwende struct eigentlich nur für PODs und Functoren.



  • Ich denke nicht, daß das eine Frage des Geschmacks ist, sondern eher eine Frage des guten Stils.

    Okay, wer schlechten Stil mag... aber dem ist eh nicht zu helfen.



  • Der Stil ist aber subjektiv, genauso wie gut und böse subjektiv sind :p

    (deswegen finde ich Programmier-Stil Diskussionen immer so dämlich, weil man nicht wirklich auf eine rational begründete Lösung kommt)



  • naja, weiter oben habe ich einen (meiner Ansicht nach guten) Grund genannt, die beiden nicht zu mischen.



  • Jester schrieb:

    naja, weiter oben habe ich einen (meiner Ansicht nach guten)
    Grund genannt, die beiden nicht zu mischen.

    weil du nicht genau liest!

    Niemand würde

    struct string;

    schreiben, denn string ist eine 'echte' Klasse.
    Aber zB

    struct NoInherit {};
    
    struct DoInherit
    {
      virtual void foo()=0;
    };
    

    Hier wäre es bei NoInherit egal ob ich class oder struct schreibe, aber bei DoInherit gibt es keine private Member. Wozu also class?

    Ich nehme struct eigentlich immer wenn es keine privaten Member gibt. Was soll daran schlechter Stil sein? Solange ich es immer so mache, gibt es auch keine zweideutigkeiten oder verwirrende Situationen.



  • Shade Of Mine schrieb:

    Ich nehme struct eigentlich immer wenn es keine privaten Member gibt. Was soll daran schlechter Stil sein? Solange ich es immer so mache, gibt es auch keine zweideutigkeiten oder verwirrende Situationen.

    es ist schlechter stil, weil stucts nicht dafür gemacht wurden. natürlich ist konsistenz im code auch wichtig, aber allgemeine notationen sind wichtiger. wieso sollte man an ein auto flügel bauen, wenn's nicht schon flugzeuge gibt? wo ist denn da das problem, für 'echte' klassen (und das ist nunmal alles, was über die funktionalität eines structs (im c-sinn) hinausgeht) auch class zu benutzen? klingt doch logisch, oder ?



  • Die Diskussion um struct und class ist kindisch.

    Hier noch mal ein konkretes Beispiel für "virtual":

    #include <iostream>
    using namespace std;
    
    class Person
    {
      public:
        /*virtual*/ void geldueberweisung(float geld){ cout << geld << " an Person " << endl; };
    };
    
    class Mitarbeiter : public Person
    {
      public:
        void geldueberweisung(float geld){ cout << geld << " an Mitarbeiter " << endl; };
    };
    
    class Kunde : public Person
    {
      public:
        void geldueberweisung(float geld){ cout << geld << " an Kunde " << endl; };
    };
    
    class Lieferant : public Person
    {
      public:
        void geldueberweisung(float geld){ cout << geld << " an Lieferant " << endl;};
    };
    
    void zahlung(Person * x, float Summe)
    {
        x->geldueberweisung(Summe);
    }
    
    int main()
    {
        Lieferant a;
        Kunde b;
        Mitarbeiter c,d;
    
        zahlung( &a, 500 );
        zahlung( &b, 300 );
        zahlung( &c, 250 );
        zahlung( &d, 170 );
    }
    


  • Ich sehe das genauso wie der komische kautz - warum in alles in der Welt benutzt man das Schlüsselwort "struct", wenn man eine Klasse (engl.: class) meint? Kann ich nicht nachvollziehen.

    Das Argument mit der Ersparnis einiger Zeichen ist irrelevant, wir (damit meine ich die Programmierergemeinde) haben uns schließlich doch inzwischen darauf geeinigt, daß Lesbarkeit vor Kürze geht. Tippfaulheit ist niemals ein Argument für eine Schreibung, sonst können wir die Variablen gleich wieder a,b,c,d nennen - ist doch kürzer.

    Und genau da kommt meine Abneigung gegen structs mit "Klassenverhalten" - es verletzt die Erwartungskonformität des Lesers. Auch wenn struct und class austauschbar sind, so assoziiert man struct eher mit POD und class mit Klassen. 98% der C++-Programmierer wissen wahrscheinlich nicht mal, daß es diese Gemeinsamkeit gibt. Warum in alles in der Welt soll man also hier zusätzliche Verwirrung beim Leser erzeugen? Der einzige bewirkte Effekt ist, daß man damit zeigt den Standard besser zu kennen als andere Code-Leser.



  • Marc++us schrieb:

    Und genau da kommt meine Abneigung gegen structs mit "Klassenverhalten" - es verletzt die Erwartungskonformität des Lesers. Auch wenn struct und class austauschbar sind, so assoziiert man struct eher mit POD und class mit Klassen.

    meine structs haben kein Klassenverhalten im eigentlichen Sinne - denn man kann sie allesamt nicht instanziieren, bzw. sind es leere Klassen.

    Ich habe schon oft gesehen dass Leute struct für functoren verwenden - weil sie eben keine Klassen darstellen. Und ein interface ist IMHO auch keine Klasse - dies drücke ich durch struct aus.

    vielleicht wäre ein #define interface struct passender 🙂

    Sobald man es wie eine Klasse verwendet, also intanziiert, Methoden aufruft,... ist es auch bei mir eine class.

    Nur wo liegt euer Problem? Solange es konsistent verwendet wird kann man ja auch Ungarische Notation verwenden 😉 Ich meine damit: wenn der Stil logisch aufgebaut ist und konsequent durchgezogen wird, spricht doch nichts dagegen, oder?



  • @Shade: Inwiefern lese ich nicht genau?

    Ansonsten denke ich wir sind uns da einig, Du nimmst das Schlüsselwort je nachdem welches Verhalten Du modellierst. Ehrlich gesagt hatte ich solche Interface-Klassen nicht bedacht, da würde ich wirklich sagen es handelt sich um eine Geschmacksfrage, wobei das mit dem #define interface struct keine schlechte Idee ist.
    Aber kingruedi sagt er nimmt das je nachdem ob er erst was privates oder was öffentliches deklariert struct oder class. Und das ist meiner Meinung nach ein sehr schlechtes Kriterium.

    MfG Jester



  • @shade:

    ich geb's auf.



  • es ist schlechter stil, weil stucts nicht dafür gemacht wurden. natürlich ist konsistenz im code auch wichtig, aber allgemeine notationen sind wichtiger. wieso sollte man an ein auto flügel bauen, wenn's nicht schon flugzeuge gibt? wo ist denn da das problem, für 'echte' klassen (und das ist nunmal alles, was über die funktionalität eines structs (im c-sinn) hinausgeht) auch class zu benutzen? klingt doch logisch, oder ?

    Tut mir leid, aber die Aussage ist nur wirklich DÄMLICH!. Ein Auto ist nicht zum fliegen gemacht. Das erkennst du z.B. daran, dass es keine Flügel oder sonstige Vorrichtungen zum Fliegen besitzt. struct besitzt aber Methoden, Kon- und Destruktoren, etc. Die wurden natürlich alle Ausversehen eingebaut. So ein kleiner Fehler kann doch jedem mal passieren.



  • Die wurden nicht 'aus Versehen' eingebaut. Man hat die C-Structs weiterentwickelt und irgendwann festgestellt, dass sich hieraus eine völlig neue Funktionalität ergeben hat und ihr dann auch einen neuen Namen gegeben.
    Also nutzt auch den neuen Namen.
    Das das struct alles kann, liegt nur daran, weil man eben diese structs weiterentwickelt hat.



  • Optimizer schrieb:

    Die wurden nicht 'aus Versehen' eingebaut. Man hat die C-Structs weiterentwickelt und irgendwann festgestellt, dass sich hieraus eine völlig neue Funktionalität ergeben hat und ihr dann auch einen neuen Namen gegeben.
    Also nutzt auch den neuen Namen.
    Das das struct alles kann, liegt nur daran, weil man eben diese structs weiterentwickelt hat.

    *lol*
    und da sind sich ja mal alle Gurus einig...

    ne, mal im ernst: ich habe sowas noch nie von irgendeinem Guru gehört/gelesen. Und ich glaube in Effective STL habe ich functoren als struct gesehen (bin mir jetzt aber nicht sicher)

    Also Leute: bevor ihr sagt: "Das ist halt so", schaut mal nach was die Gurus dazu, wenn diese das auch so sehen -> OK, wenn nicht, dann ist es eben nicht so.

    wo ist hier bitte der Unterschied:

    class foo
    {
    public:
      void operator()(int i)
      { /*bla*/ };
    };
    
    struct foo
    {
      void operator()(int i)
      { /*bla*/ };
    };
    

    es ist beides klar. Und ich habe gute Punkte genannt wo ich struct statt class verwende - da ist bei mir alles fein säuberlich aufgeteilt - es gibt keine missverständnisse.

    ich will nicht behaupten mein stil sei besser als immer class zu schreiben, aber mein Stil ist klar. Und deshalb ist er nicht schlechter als immer class zu schreiben.

    btw: class gibt es nur, weil sich class besser anhört als struct.
    Es ist also ein marketing gag - mehr nicht.

    warum regt ihr euch so auf? bringt argumente warum es schlecht sein sollte einen functor der keine eigenen Member besitzt als struct zu deklarieren und wir können weiter reden.

    btw: "das macht man nicht" zieht erst, wenn ihr Meyers, Sutter, Stroustrup, etc. zitiert.



  • Shade, ich weiß gar nicht, was es da zu lachen gibt. Für meinen Geschmack hat Marc++us gute Gründe gebracht. Und nur weil Du Deinen Idolen hörig bist, müssen wir nicht alle die gleiche Meinung vertreten. Du solltest andere Meinungen zulassen, ohne sie mit einem abfälligen *lol* nichtig zu machen.

    Meine Meinung. 😉



  • @Marc++us

    Auch wenn struct und class austauschbar sind, so assoziiert man struct eher mit POD und class mit Klassen.

    da gab es doch den Witz mit "Alle Programmierer neigen zu Verallgemeinerungen" 😃

    98% der C++-Programmierer wissen wahrscheinlich nicht mal, daß es diese Gemeinsamkeit gibt. Warum in alles in der Welt soll man also hier zusätzliche Verwirrung beim Leser erzeugen?

    wenn die Person aber nur 1/5 Verstand hat, wird sie spätestens beim 2. Blick merken, dass dieses Verhalten möglich ist und das ist insofern ein minimal-Problem.

    Es kennen auch viele C++ Programmierer keine Template-Spezialisierung oder Namespaces, soll ich das jetzt auch nicht benutzen? Wobei diese Konzepte IMHO komplizierter sind.



  • -King- schrieb:

    Shade, ich weiß gar nicht, was es da zu lachen gibt. Für meinen Geschmack hat Marc++us gute Gründe gebracht.

    struct wird mit POD assoziiert?
    Naja...

    struct Test
    {
     std::string s;
    };
    

    ist also verboten?
    sehr interessant... hier muss ich also

    class Test
    {
    public:
      std::string s;
    };
    

    schreiben...

    Naja, die semantik von class Test und struct Test ist doch die selbe.
    Warum muss ich einmal class und einmal struct verwenden - wenn diese 'Struktur' lediglich Daten beinhalten soll.

    Siehst du, ich nehme hier struct um zu zeigen, dies ist keine Klasse.

    Ich nehme für interfaces ebenfalls struct um zu zeigen, dies ist keine Klasse.

    Erklär mal, welche Regel du hast!
    POD == struct
    alles andere == class
    ?
    Ok, damit kann ich leben.

    warum kannst du aber nicht mit meinem Stil leben? Ist er so abwegig?

    Und nur weil Du Deinen Idolen hörig bist, müssen wir nicht alle die gleiche Meinung vertreten. Du solltest andere Meinungen zulassen, ohne sie mit einem abfälligen *lol* nichtig zu machen.

    Ich glaube ich bin im falschen Film...

    Ich sage ja die ganze Zeit: Jeder so wie er will.
    Ich bringe Argumente warum ich der Meinung bin, dass mein Stil nicht schlechter ist als eurer.
    Ich lasse euch ja euren Stil und sage nicht
    selbst Stroustrup verwendet struct (siehe seine HP)

    Ich finde es in Ordnung wenn ihr einen anderen Stil habt - Ihr wollt mir ja nicht meinen Stil lassen - weil er "abartig" ist.

    Dass Sutter, Meyers, Dewhurst, Stroustrup,... struct genauso verwenden wie ich, scheint ja nciht zu zählen.

    Mal im ernst: wenn ich die Wahl habe auf so ziemlich alle Gurus zu hören, oder auf euch - dann muss ich mich leider für die Gurus entscheiden. Vorallem dann, wenn sie genauso denken wie ich selber.

    Nennt mir also einen Grund warum mein Stil (und der von Meyers, Sutter, Stroustrup,...) schlechter ist als eurer.

    Und mir nicht vorwerfen dass ich keine anderen meinungen zu lassen und mir schon garnicht vorwerfen, dass es hier allgemeine Notationen gibt.

    Wenn es allgemeine Notationen gibt, dann zeigt mir woher ihr sie habt. Woher ich meinen Stil habe, habe ich belegt. Und die "Gurus denen ich hörig bin" sind ja wohl mal n Argument - habt ihr ein besseres?



  • Shade Of Mine schrieb:

    struct wird mit POD assoziiert?
    Naja...

    Ja und nein. Davon habe ich nun gar nichts gesagt. Und so, wie das hier abgeht, werde ich auch in Zukunft von meiner Meinung nicht richtig was los. Ich finde es nur schade, daß die Meinung aller anderen nichtig gemacht wird von jemandem, der keine eigene Meinung hat und sich auf seine Idole berufen muß. Ich werde hier auch nichts weiter erklären. Punkt.

    EOT (für mich).


Anmelden zum Antworten