Klassen, structs, unions



    1. Das hat man schneller ausprobiert als einen Post hierher geschrieben.
      struct IST EINE class, nur mit default-public sollte doch eigentlich alles sagen.

    2. Die Member liegen in separaten Speicherstellen, Methoden existieren pro Klasse nur einmal (wäre ja Verschwendung, für jedes Objekt auch die Methoden eigens im RAM abzulegen...)



  • ok, vielen Dank schonmal.

    Also gibt es eigentlich keinen großen Unterschied zwischen struct und class (außer bei der default Sichtbarkeit)?

    Vielen Dank
    lg, freakC++



  • freakC++ schrieb:

    ok, vielen Dank schonmal.

    Also gibt es eigentlich keinen großen Unterschied zwischen struct und class (außer bei der default Sichtbarkeit)?

    Vielen Dank
    lg, freakC++

    Nein.



  • drakon schrieb:

    freakC++ schrieb:

    ok, vielen Dank schonmal.

    Also gibt es eigentlich keinen großen Unterschied zwischen struct und class (außer bei der default Sichtbarkeit)?

    Vielen Dank
    lg, freakC++

    Nein.

    2 (zugegeben ziemlich kleine) würden mir noch einfallen ;P
    bei der forward-deklaration kann man nicht beides mischen

    struct foo;
    
    /*...*/
    
    class foo{ /*...*/ }; //fail...
    

    bei templates kann man class schreiben aber nicht struct .
    mehr sollte es aber nicht geben!?

    bb



  • unskilled schrieb:

    2 (zugegeben ziemlich kleine) würden mir noch einfallen ;P
    bei der forward-deklaration kann man nicht beides mischen

    struct foo;
    
    /*...*/
    
    class foo{ /*...*/ }; //fail...
    

    Sicher? - Mit Visual Studio geht das. Könnte sein, dass das ein Feature von Visual Studio ist, obwohl ich das normalerweise abgeschalten habe.. *nachschau*..Ja, sogar, wenn Spracherweiterungen aus sind, bekomme ich lediglich eine Warning. Bin jetzt aber zu Müde, um das noch im Standard nachzuschlagen. 😉 - Aber ich hatte sowieso auch im Kopf, dass das mischen sogar erlaubt ist.

    OK. Das class bei den templates hat so ziemlich eine andere semantische Bedeutung.

    Ich glaube ich hatte mal etwas von wegen alignmend oder padding gesehen, was bei struct und class anderst gehandhabt wird. Weiss aber nicht mehr genau, was es war.. Auf jeden Fall nicht von grosser Bedeutung.



  • Streng genommen sind in C++ sowohl union als auch class und struct Klassentypen. Hier meine Meinung, was ungefähr wie einzusetzen ist:

    • In C++ kommt union kaum zur Geltung, da es nur mit PODs funktioniert, nicht gerade sehr typsicher ist und die Funktionalität eher selten gebraucht wird. In vielen Fällen existieren bessere Alternativen (ich meine jetzt nicht nur boost::variant ).
    • class handhaben eigentlich alle C++-Programmierer als das, was man üblicherweise unter Klassen versteht (z.B. Kapselung, Konstruktoren/Destruktoren, Methoden, Vererbung, Polymorphie).
    • struct wird meist als reines Datenbündel eingesetzt, also ähnlich wie in C. Ich selbst füge immer Konstruktoren hinzu, um eine Initialisierung sicherzustellen. Andere typisch objektorientierte Features setze ich bei struct s hingegen nicht ein.


  • Das halte ich so ähnlich.



  • drakon schrieb:

    unskilled schrieb:

    2 (zugegeben ziemlich kleine) würden mir noch einfallen ;P
    bei der forward-deklaration kann man nicht beides mischen

    struct foo;
    
    /*...*/
    
    class foo{ /*...*/ }; //fail...
    

    Sicher?

    Bis gerade eben schon xD
    Aber jz beim Testen hab ich auch nur noch die Warning - hab ich mich wohl wirklich geirrt, weil ich auf anhieb jz nix gefunden habe, wo steht, dass das nen problem geben würde...
    vll hab ich ja morgen mal lange weile - dann guck ich mal im standard, ob ich iwas dazu find^^

    bb



  • Hey,
    vielen Dank noch für die späte Hilfe. Ich persönlich habe noch nie mit unions gearbeitet und werde wahrscheinlich erstmal weiterhin mit struct und class herumtwerkeln.

    Bis bald!
    lg, freakC++



  • Zugegeben. Ich habe bist jetzt union ausserhalb von Tests noch nie ernsthaft gebraucht..


Anmelden zum Antworten