C+ statt C++



  • 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;
    };
    


  • (*snip* - erstmal schlafen.)



  • Helium schrieb:

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

    Das funktioniert aber auch nur in Template-Deklarationen.



  • Das funktioniert aber auch nur in Template-Deklarationen.
    

    Was willst du mir damit sagen? Abhängige Typen müssen explizit qualifiziert werden.



  • Vergiss es 😉 . Hab mich beim lesen deines Postings ein wenig verlesen und vorschnell gepostet.


Anmelden zum Antworten