C+ statt C++



  • 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).



  • -King- schrieb:

    Shade Of Mine schrieb:

    struct wird mit POD assoziiert?
    Naja...

    Ja und nein.

    ist

    struct T
    {
      string s;
    };
    

    ein POD?
    Ist es OK T als struct zu deklarieren oder muss hier ein class hin?
    Was ist deine Meinung?

    Davon habe ich nun gar nichts gesagt.

    Du nicht, aber Marc++us.
    Und wenn ich den Satz "Für meinen Geschmack hat Marc++us gute Gründe gebracht" richtig deute, findest du Marc++us Gründe berechtigt und denkst ähnlich wie er.
    Insofern dachte ich, dass ich mit dir ebenfalls über diese Argumente reden kann.

    Sorry, das muss ich wohl falsch verstanden haben. Kannst du mich bitte aufklären?

    Und so, wie das hier abgeht, werde ich auch in Zukunft von meiner Meinung nicht richtig was los.

    Das ist schade. Denn wenn ich nicht von Meyers, Sutter & Co lernen darf und von dir auch nicht - wie soll ich dann je programmieren lernen?

    Ich finde es nur schade, daß die Meinung aller anderen nichtig gemacht wird von jemandem, der keine eigene Meinung hat

    Oh, meinst du etwa mich? Da muss ich mich wohl irgendwo etwas unklar ausgedrückt haben. Aber das können wir ja leicht klären.
    Darf ich hierzu mich selber zitieren?

    Was soll daran schlechter Stil sein?

    Anmerkung: Ich sprach von meinem Stil und fragte, warum er denn nun schlechter sei. Ich gab keine Wertung ab, was ich von dem anderen Stil (struct==POD) halte.

    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?

    Anmerkung: Ich habe wieder keine Wertung über den anderen Stil abgegeben. Auch habe ich nicht schlecht davon gesprochen, oder abwertende Bemerkungen gemacht.

    es ist beides klar. [Anmerkung: struct oder class bei einem functor] 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.

    Anmerkung: wieder habe ich meinen eigenen Stil verteidigt, und kein schlechtes Wort über struct==POD verloren.

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

    Anmerkung: man beachte das 'OK, damit kann ich leben.'

    So, ich habe jetzt alle meine (auf dieses Thema bezogenen) Posts zitiert. Ich kann keine unklarheit entdecken - und auch kann ich (in meiner beschränktheit) nicht sehen, wo ich eine andere Meinung nicht zulies. Oh, doch. Eine Meinung konnte ich nicht akzeptieren, und zwar "wer stucts wie klassen benutzt ist pervers !". Es tut mir leid, aber ich lasse mich nicht gerne als pervers bezeichnen. Deshalb kann ich diese Meinung nicht akzeptieren. Es tut mir leid 😞

    und sich auf seine Idole berufen muß.

    Ich lese nunmal Bücher von Sutter, Meyers, Stroustrup,... und leider keine von dir 😞 da ist es doch natürlich, dass ich mich an denen ihren Stil anlehne, oder? Ich übernehme keine Sachen grundlos in meinen Stil - alles hat Gründe warum ich es so mache. Ich bin halt noch ein Anfänger... Vielleicht wenn ich einmal so gut bin wie du, dann werde ich meinen Stil vielleicht grundlegend ändern. Aber bis dahin bleibe ich bei meinem Stil - da ich es einfach nicht besser weiss.

    Ich werde hier auch nichts weiter erklären.

    Schade, ich hatte gehofft von dir lernen zu können wie man es richtig macht 😞
    Naja, dann muss ich wohl doch weiter Bücher von Stroustrup, Sutter und Meyers lesen, anstatt mich von dir erleuchten zu lassen 😞



  • Meine Meinung zählt zwar ebenfalls nichts, aber mein Stil bezüglich struct und class sieht genauso aus, wie der von Shade.

    ist

    C/C++ Code:
    struct T
    {
    string s;
    };

    C/C++ Code:
    ............

    ein POD?

    Eigentlich nicht, aber bei mir fallen pure Datanhalter und echte PODs in die selbe Kategorie.



  • Ich habs für mich so formuliert: Was ohne private/protected/public auskommt, wird ein struct. Dass sie Elementfunktionen haben kommt aber durchaus mal vor, obwohl es meistens ein Zeichen dafür ist, dass bald Klassen aus ihnen werden.



  • I versteh gar nicht die ganze Aufregung, wer es für jeden eindeutig haben will der kommentiert einfach.

    Eigentlich stört es mich ganz und gar nicht ob ich nun struct sehe oder class. Die Declaration folgt ja sowieso und da braucht man meist nur einen schnellen Blick auf die Anzahl der () zu werfen um heraus zu finden was gemeint ist. Man ist ja kein Kompiler der nur das Schlüsselwort sieht, einen Namem und dann eine { oder ein ; sondern man hat ja auch Menschenverstand. Und falls die Declaration mal nicht folgt so ist man sowieso nur mit einem Pointer konfrontiert.

    98% der C++-Programmierer wissen wahrscheinlich nicht mal, daß es diese Gemeinsamkeit gibt.

    Naja 98% für die Info, dass struct das gleiche ist als class{public: ist meiner Ansicht doch ein wenig viel. 50% wären der Realität woll näher.
    So um die 75% würde ich folgende Infos schätzen:
    1)

    class A{};
    class A a;
    //anstatt
    A a;
    
    int a(5);
    //anstatt
    int a=5;
    

    oder auch noch dass dies nicht geht:

    struct A{
    /*operator folgt somit ist es wahrscheinlich eine class
    die mit den public: Membern begint*/
    friend A&operator=(A&,A&);
    };
    

    Aber für 98% da glaub ich nicht, dass man was findet. 😉

    :xmas1:



  • Shade Of Mine schrieb:

    "wer stucts wie klassen benutzt ist pervers !". Es tut mir leid, aber ich lasse mich nicht gerne als pervers bezeichnen. Deshalb kann ich diese Meinung nicht akzeptieren. Es tut mir leid

    tut mir leid, wenn du dich persönlich angegriffen fühlst, so war es bestimmt nicht gemeint. ich wollte nur meinen standpunkt deutlich ausdrücken und habe mich da wohl etwas in der wortwahl vergriffen.
    sry, aber dennoch ändert das nichts an meiner meinung.



  • Optimizer schrieb:

    häh?
    Leute, offenbar ist vielen von euch nicht bewusst, dass structs und Klassen (deshalb hab ich es auch so provokant geschrieben) das selbe sind.
    Sie werden auch genau so wie Klassen benutzt. Der einzige mir bekannte Unterschied ist der, den MaSTaH erwähnt hat.

    Sorry hatte die Strukturen aus C im Kopf...



  • Falls irgendjemand an meinem Stil interressiert ist - ich benutze ausschließlich Klassen. Warum? Weil

    1. mich das public: nicht umbringt und ich explizit kennzeichnen will, wenn etwas public ist.

    2. warum zum Henker und um alles in der Welt sollte ich zwei verschiedene Schlüsselwörter für das selbe Konstrukt benutzen? Ihr verkünstelt euch da in eure Kleinigkeiten ( 😉 ), aber ich denke mal ganz einfach: Ein C++ - struct ist eine Klasse. Daran kann man nichts rütteln. Auch wenn es nur public member und keine Funktionen beinhaltet, ist es eine Klasse. (In diesem Fall ist es auch ein "herkömmliches" struct.) Es entzieht sich völlig meinem Verständniss, warum ich da überhaupt eine Unterscheidung vornehmen soll.

    Das ist doch mal ein Standpunkt, über den man genauso nachdenken könnte, oder? :xmas1:
    Also, jetzt begründet mal bitte nicht, warum ihr eure Unterscheidung so macht, sondern warum ihr überhaupt ne Unterscheidung macht??



  • Optimizer schrieb:

    Also, jetzt begründet mal bitte nicht, warum ihr eure Unterscheidung so macht, sondern warum ihr überhaupt ne Unterscheidung macht??

    Weil IMHO Klasse != Interface != Functor != Sammlung von Werten
    Und dies drücke ich durch verschiedene schreibweisen aus - aber das habe ich ja schon erklärt.

    Was stört dich daran?

    Ich will ja nicht wieder mit 'meinen Idolen' anfangen - also kann ich es nur so begründen: weil es mir logisch erscheint.

    Du verwendest immer nur class - das ist doch auch OK.



  • In meinem C++ Buch (IT-Studienausgabe vom C++ Primer) steht, dass laut dem
    neuesten Standard das Nachfolgeschlüsselwort von "class" "typename" ist, jetzt
    frage ich mich natürlich wozu das gut sein soll.
    Klar struct ist wegen C noch drin und der damit verbundenen abwärtskompatibilität,
    und class eben der Nachfolger, aber wozu soll jetzt das dritte gut sein? Nur um
    noch mehr Verwirrung zu stiften? Es kennen ja viele nichtmal Namespaces und viele
    lernen C++ nichtmal mit den Namespaces da viele Bücher veraltet sind.



  • Und du bist sicher, dass sich das nicht nur auf template-Argumente bezieht? Ob man template<typename T> oder template<class T> schreibt, ist egal, aber ansonsten ist "typename" für ganz andere Sachen da...



  • Ja kann sein, da es nach einem Beispiel für nen Template steht.
    Aber es steht da nichts davon, dass dies nur für Templates gilt (da es nichtmal
    im Kapitel über Templates steht).



  • Es bezieht sich nur auf templates. Falls ich class willkürlich mit typename austausche, so krieg ich folgenden Error:

    'typename' is only allowed in template declarations

    Und der Grund für das neue Keyword ist eigentlich (soweit ich weis) gar nicht mal soweit vom Unterschied class-struct weg. Wenn man class in einer template declaration benutzt so könnte man annehmen, dass es sich nur auf class Types bezieht und somit nicht auf structs oder build-in Types, und deshalb das neue Keyword.
    Allerdings find ich es übertrieben wegen dieses Schönheitsfehler ein neues Keyword einzubauen.

    Ich will ja nicht wieder mit 'meinen Idolen' anfangen

    Ist auch besser so, kling nämlich ein wenig besserwisserisch, und so als ob du nur andere nachamen könntest. Aber das ist nur mein Eindruck.

    weil es mir logisch erscheint.

    Ich glaub das ist sowieso der einzig halbweg stichfeste Grund den man überhaupt anführen kann.

    Also meiner Ansicht nach einfach ein wenig Kommentar hinzufügen, denn, wie man so schön hier sieht, kann der der den Kode mal lesen soll/wird eine völlig andere Auffassung haben vom Unterschied class-struct. Und wie schon gesagt können die meisten Missverständinise dadurch ausgeräumt werden sich die eigentlich Deklaration mal anzusehen. Und eingentlich ist die Frage ob class oder struct ja eh überflüssig denn es geht ja nur darum, dass der Kode für andere verständlich ist und wenn das an einem Keywoed hängt dann ist eh irgendwo der Wurm drin.



  • Irgendwer schrieb:

    Ich will ja nicht wieder mit 'meinen Idolen' anfangen

    Ist auch besser so, kling nämlich ein wenig besserwisserisch, und so als ob du nur andere nachamen könntest. Aber das ist nur mein Eindruck.

    Oh, ich wünschte ich wäre so gut wie du, dass ich auf alle Tricks, Idiome, Design Pattern und Styles selber darauf komme 😞



  • @Shade: Ich weiß ehrlich gesagt garnicht, warum Du Dich hier so aufplusterst. Es ging darum ob man class und struct austauschbar verwenden sollte oder nicht. Dazu sagtst auch Du "nein", Du verwendest beides, aber nicht bei der gleichen Semantik, nicht austauschbar, sondern aus Konsistenzgründen immer das gleiche. Und damit hat hier glaube ich auch keiner Probleme.
    Wie Du Deinen Funktor deklarierst ist beide Sache, aber Du wirst wohl nicht

    class CSSort;
    struct CISort;

    schreiben, sondern beides struct oder beides class.
    Das Kriterium, erste public oder erstes private ist einfach Mist.

    <arroganz>
    und bei Meyers und bei Sutter und bei Alexandrescu und bei...
    hab ich auch noch keine (echte) Klasse gesehen, die mit struct deklariert war, weil sie als erstes Element etwas öffentliches hatte.
    </arroganz>
    Aber hier hat ja der Guru gesprochen.

    So und nu is wieder friedlich 😉
    MfG Jester



  • Es bezieht sich nur auf templates. Falls ich class willkürlich mit typename austausche, so krieg ich folgenden Error:
    Zitat:
    'typename' is only allowed in template declarations

    Nur damit das Klar ist: man braucht es für mehr als nur für template<typename T>

    template <typename T>
    class Foo {
       typename std::vector<T>::iterator foo;
    };
    

Anmelden zum Antworten