strcut vs class
-
Hi!
Ich habe da mal eine frage.. also.. Ich habe mir vor ewigkeiten leider angewoehnt praktisch keinerlei Strcuts mehr zu benutzen sondern fuer eigentlich alles Klassen zu benutzen.
Jetzt wuerde mich einfach mal am rande interessieren, wie das eigentlich mit der performance ist. Ist es besser fuer einfache Dinge (Beispiel ein struct mit drei Int Werten) structs zu verwenden oder Klassen - oder kann man sich ruhig herausreden und sagen, dass man gerne vorbereitet darauf sei, falls man mal methoden in seine Datentypen einbauen muss?
-
Von der Performance her tut sich das gar nichts.
Wie kommst du darauf, dass man in Structs keine Methoden einbauen könnte?
-
Is beides das gleiche außer das bei Strukturen die Standardzugriffspezifikation "public" ist bei Klassen "private".
-
Es ist für die Performance völlig unerheblich, ob man struct oder class verwendet, da sich beide nur in der Default-Sichtbarkeit von Membern unterscheiden (struct: alles public, class: alles private).
-
In C++ ist ein struct technisch das gleiche wie ein class. Macht also von der Perfomance keinen Unterschied. Der Unterschied ist nur bei der Sichtbarkeit der Members und bei der Ableitung... aber nur ein semantischer Unterschied, nichts mit Performance o.ä.
-
Hallo
In strcuts kannst du bei c++ doch auch Methoden verwenden. es gibt nur den Unterschied zwischen public und private.
chrische
-
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.