strcut vs class
-
Structs sind Klassen. Sie sind nur von sich aus öffentlich:
struct Foo { Foo () : x(42); virtual void bar () { cout << "Foo::bar()\n"; } private: int x; }; struct Baz : Foo { Baz () void bar () { cout << "Baz::bar()\n"; } private: int y; }; ...
-
Kurzfassung: Nimm doch, was du willst

Langfassung: In C++ gibt es nur einen Unterschied zwischen struct und class - der voreingestellte Zugriffsmodus für Member und Basisklassen (struct's sind public, class'en private). Intern sehen beide völlig gleich aus.
-
Wer will? Wer hat noch nicht?

-
Artchi schrieb:
Wer will? Wer hat noch nicht?

Also, um es jetzt endlich mal auf den Punkt zu bringen:
Struct und Class sind identisch, bis auf die Default-Sichtbarkeit (public bei struct, private bei class).*duck*
-
Uuups - das hab ich bisher gar nicht gewusst *G*
Dachte man unterscheidet die dinger dadurch, dass das eine Methoden hat und andere nicht *G*Danke ^^
-
hm structs unterstützen polymorphie ?
dann stellt sich eine neue frage...wozu haben die dann ein neues schlüsselwort hinzugefügt ?
z.b. schreibe ich immer public und private hin ...
-
'class' klingt eher nach Klasse als struct (letzteres hat C++ von C geerbt und letztlich auch aufgewertet - vermutlich gab es in den frühen Phasen des C++ Entwurfs auch noch inhaltliche Unterschiede zwischen beidem).
PS: Ich nutze die verschiedenen Namen meist zur semantischen Unterscheidung - struct für Strukturen mit C-artiger Semantik, class für ausgewachsene Klassen.
-
Stelfer schrieb:
wozu haben die dann ein neues schlüsselwort hinzugefügt ?
z.b. schreibe ich immer public und private hin ...aus gründen der c-kompabilität. Es ist halt sinnvoll, dass ne class standardmäßig private ist(eben damit nicht irgendwas ausversehen öffentlich ist, was nicht sein soll), aber diese änderung konnte man nicht auf die struct direkt anwenden, da sonst c-code kaputt wäre. Zumindest denk ich, dass das die beweggründe waren.
-
@otze! Es ist die einzig logische Begründung (C-Kompatibilität), warum überhaupt struct in C++ existiert und darin alles public ist. Man hat sich wohl gedacht "Gut, wenn wir eh schon struct drin haben müssen, können wir da auch gleich Methoden und Vererbung zu lassen. Den Compiler-Herstellern ist das vom Aufwand her eh egal."
-
Strukturen ohne Ctor/Dtor, versteckte Elemente und vtable bezeichnet man auch als POD (bin mir nicht sicher, ob das auch für Klassen gilt). Das ist schon ein wichtiger Unterschied (zB wenn man eine
unionbenutzen will).Nachtwind schrieb:
Jetzt wuerde mich einfach mal am rande interessieren, wie das eigentlich mit der performance ist.
Mach dir nicht solche Gedanken über µOptimierungen. Das bringt es nicht! Mach dir lieber Gedanken über die verwendeten Algorithmen und die Speicherung der Daten, wenn du Optimierung betreibst.
-
rüdiger schrieb:
Strukturen ohne Ctor/Dtor, versteckte Elemente und vtable bezeichnet man auch als POD (bin mir nicht sicher, ob das auch für Klassen gilt). Das ist schon ein wichtiger Unterschied (zB wenn man eine
unionbenutzen will).Ja, das gilt auch für Klassen (ein
class xyz{public:...};ist identisch zu einemstruct xyz{...};). Übrigens mußt du diese Definition auch rekursiv auf die Member anwenden - wenn dein struct std::string's verwendet, ist es schon kein PoD mehr.