C+ statt C++



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



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

    die Frage war ob es sich nur auf templates bezieht oder einne Art #define typename class (zu mindest hab ich sie so verstanden) und das geht nun einmal nicht:

    typename A{
    };
    

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

    Ich habe nie gesagt, dass ich alles weis (und ich kann dich beruhigen da gibt es so manches was ich nicht weis). Ich habe blos gesagt, dass ich es besserwisserisch finde seine Meinung dadurch zu begründen, dass man seine Meingung dadurch begründest, dass man auflistet welche seiner Idolen man meint, dass er es genauso macht. Begründet hat man damit ja nichts! Aber wie schon gesagt dies ist meine Meinung.

    Aber zurück zum Thema, ich bin immer noch der gleichen Auffassung wie in meinen vorherigen Posts.



  • Irgendwer schrieb:

    Ich habe blos gesagt, dass ich es besserwisserisch finde seine Meinung dadurch zu begründen, dass man seine Meingung dadurch begründest, dass man auflistet welche seiner Idolen man meint, dass er es genauso macht.

    Aber sagen "das macht man nicht so" ist eine Begründung?
    Ich habe genug Punkte angeführt um meine Denkweise zu verstehen, wenn es trotzdem nicht klar war, dann halt nachfragen.

    Schließlich habe nicht ich mit "das macht man so" angefangen. Ich wollte damit nur aufzeigen, dass man es sehr wohl anders macht. Oder hat jemand bessere Referenzen vorzuweisen als den Erfinder von C++ selbst (sammt einer Handvoll Leute des C++ Standardisierungskomitees) - Wodurch ich das Argumente, dass struct ja eigentlich dafür garnicht 'erfunden' wurde, zu nichte gemacht habe.

    Wenn wir von C++ und 'common practices' reden, kommen wir an den Ratschlägen des Standardisierungskomitee nunmal nicht vorbei. Oder doch? Naja, wer sind die denn schon... Schließlich habe ich hier ja Profis vor mir und die müssen es ja wissen.

    Btw: ich habe meine Meinung mit meine 'Idolen' nur untermauert. Ich habe nicht gesagt: Die machen es so, also müssen wir es auch so machen. Ich habe nur gesagt: die machen es genauso wie ich, also kann ich ja nicht total falsch liegen.

    Aber meine unwissendheit tut mir ja leid, und deshalb werde ich meinen Stil grundlegend ändern müssen. Denn schließlich sind hier so viele stichhaltige Argumente gegen mich gefallen, dass mir keine andere Wahl bleibt...



  • Wenn ich mir das so durchlese... wird Erffe wahrscheinlich bei "C mit Klassen" bleiben wollen 🙄



  • Aber sagen "das macht man nicht so" ist eine Begründung?

    Nein, und das hab ich auch nict gesagt. Ich hab gesagt, dass wenn man nicht kommentirt Missverständinise wahrscheinlich sind weil verschiedene Leute verschiede Auffassungen vom Unterschied struct-class haben. Und dass sie verschieden sind begründe ich mit den Meinungsverschiedenheiten in diesem Topic.

    Wenn wir von C++ und 'common practices' reden, kommen wir an den Ratschlägen des Standardisierungskomitee nunmal nicht vorbei. Oder doch? Naja, wer sind die denn schon... Schließlich habe ich hier ja Profis vor mir und die müssen es ja wissen.

    Jetzt mach mal halt da, das sind auch nur Menschen und keine Götter. Und um erlich zu sein interessirt es mich wenig was die anscheined gesagt haben wenn man Program so läuft wie ich es will. Und (jetzt kommt meiner Ansicht nach ein Argument 😃 ) ist die Mehrheit der C++Programmirer kein Mitglied des Standardisierungskomitees, und deshalb ist kein Verlass darauf, dass jeder diesen Still versteht.

    Schließlich habe nicht ich mit "das macht man so" angefangen.

    Irgendwie erinnert mich dieser Satz an die Grundschule, da hieß es auch immer "Er hat angefangen!".

    Aber meine unwissendheit tut mir ja leid, und deshalb werde ich meinen Stil grundlegend ändern müssen. Denn schließlich sind hier so viele stichhaltige Argumente gegen mich gefallen, dass mir keine andere Wahl bleibt...

    Es sind soviel gegen dich gefallen wie für dich.

    Wenn ich mir das so durchlese... wird Erffe wahrscheinlich bei "C mit Klassen" bleiben wollen

    lol

    Shade Of Mine schrieb:

    Schließlich habe ich hier ja Profis vor mir und die müssen es ja wissen

    Irgendwer schrieb:

    (und ich kann dich beruhigen da gibt es so manches was ich nicht weis)

    Irgendwie find ich diese Aussagen widersprüchlich 🙄



  • Irgendwer schrieb:

    Und (jetzt kommt meiner Ansicht nach ein Argument 😃 ) ist die Mehrheit der C++Programmirer kein Mitglied des Standardisierungskomitees, und deshalb ist kein Verlass darauf, dass jeder diesen Still versteht.

    Was ist mit Expression Templates? functoren? Multiple Dispatching? bestimmte Design Pattern? Factories? Template-tricks wie zB spirit? boost generell? Policy based Design? ADL? usw.

    Sind das Sachen die die meisten C++ Programmierer können?
    Ich glaube nicht...
    Aber sie sind trotzdem sinnvoll - oder soll ich sie besser nichtmehr verwenden, weil irgendwer es nicht verstehen könnte?

    Irgendwer schrieb:

    Aber sagen "das macht man nicht so" ist eine Begründung?

    Nein, und das hab ich auch nict gesagt. Ich hab gesagt, dass wenn man nicht kommentirt Missverständinise wahrscheinlich sind weil verschiedene Leute verschiede Auffassungen vom Unterschied struct-class haben. Und dass sie verschieden sind begründe ich mit den Meinungsverschiedenheiten in diesem Topic.

    ich kann leider nicht beurteilen ob du 'komischer Kautz' bist/warst. Aber er brachte dieses Argument.

    Schließlich habe nicht ich mit "das macht man so" angefangen.

    Irgendwie erinnert mich dieser Satz an die Grundschule, da hieß es auch immer "Er hat angefangen!".

    Oh, dann nehme ich es natürlich zurück.
    Ne, mal im ernst: wenn jemand anderer sagt: "das macht man so" und ich bringe dann beispiele dass man es "nicht so macht" - wo ist da etwas kindisches dabei?



  • Sind das Sachen die die meisten C++ Programmierer können?
    Ich glaube nicht...

    Nein aber mit dem class/struct keyword sind sie schon konfrontiert.

    Aber sie sind trotzdem sinnvoll - oder soll ich sie besser nichtmehr verwenden, weil irgendwer es nicht verstehen könnte?

    Man kann auch all das wissen und trotzdem eine andere Auffassung davon habe wann man class oder struct verwendet.

    ich kann leider nicht beurteilen ob du 'komischer Kautz' bist/warst. Aber er brachte dieses Argument.

    Bis jetzt hab ich mich noch nicht in diesem Forum registriert. Vielleicht sollte ich das mal machen.

    Oh, dann nehme ich es natürlich zurück.
    Ne, mal im ernst: wenn jemand anderer sagt: "das macht man so" und ich bringe dann beispiele dass man es "nicht so macht" - wo ist da etwas kindisches dabei?

    Es war nicht ein Beispiel sondern mehrere, und zum streiten braucht man ja bekantlich (min) 2, da zu behaupten der andere habe angefangen ist die standard Antwort eines Kindes (nimm das jetzt bitte nicht als Beleidigung, ist halt einfach so).


Anmelden zum Antworten