PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wozu braucht man in C++ noch Structs, wenn man Klassen bzw. Objekte hat?


Gast
2007-10-04, 05:38:40
Wozu braucht man die noch, bei reinem echten C++ Code?
Also kein Mischcode mit C oder so Späße.


Sind Structs performanter als Objekte?



Bsp:

Klasse (bzw. Objekt wenn es initalisiert ist):
class Datum {public: short tag, monat, jahr; };

vs.
Struct:
struct Datum {short tag, monat, jahr};


IMO sind Structs doch total überflüssig, wenn Objekte genau den gleichen Job erledigen.

Grestorn
2007-10-04, 07:50:31
Wozu braucht man die noch, bei reinem echten C++ Code?
Also kein Mischcode mit C oder so Späße.


Sind Structs performanter als Objekte?



Bsp:

Klasse (bzw. Objekt wenn es initalisiert ist):
class Datum {public: short tag, monat, jahr; };

vs.
Struct:
struct Datum {short tag, monat, jahr};


IMO sind Structs doch total überflüssig, wenn Objekte genau den gleichen Job erledigen.

structs sind in der Tat etwas leichtgewichtiger, aber das ist nur minimal.

Hauptsächlich sind sie aus Kompatibilitätsgründen noch vorhanden, damit auch C-Code einwandfrei in einer C++ Umgebung eingesetzt werden kann.

Trap
2007-10-04, 07:53:04
struct und class sind tatsächlich bis auf den unterschiedlichen Standardwert der Sichtbarkeit völlig identisch.

Die Ersetzbarkeit ist auch umgekehrt, jedes class { ...} kann man durch struct { private: ...} ersetzen.

Gast b
2007-10-04, 07:55:21
Technisch ist AFAIK kein Unterschied, allerdings verwendet man structs eben nur für Datentypen, die eben nur Daten enthalten und keine Funktionalität. Wenn man hier ein Sprachmittel hat, wodurch man etwas mehr differenzieren kann, ist das ja nicht verkehrt. Aber wirklich brauchen tut man sie jetzt eigentlich nicht.

Coda
2007-10-04, 12:34:40
structs sind in der Tat etwas leichtgewichtiger, aber das ist nur minimal.
Sind sie nicht.

Grestorn
2007-10-04, 14:28:47
Sind sie nicht.

Keine v-table? Hm, wohl nicht, wenn keine Methoden enthalten sind. Wirst scho recht haben...

Coda
2007-10-04, 14:29:24
Eine V-Table wird nur generiert wenn du virtuelle Funktionen benützt. Auch bei structs (Ja, structs können Funktionen haben). Normale Funktionen kannst du hinzufügen wie du lustig bist, dafür braucht man keine V-Table.

Der einzige Unterschied zwischen struct und class ist, dass struct defaultmäßig public erbt und alle Member public sind. Bei class beides private. That's it.

Grestorn
2007-10-04, 14:30:42
Eine V-Table wird nur generiert wenn du virtuelle Funktionen benützt. Auch bei structs. Normale Funktionen kannst du hinzufügen wie du lustig bist, dafür braucht man keine V-Table.

Jaaaa.... das weiß ich. Was ich nicht wusste ist, dass man bei structs auch Methoden angeben kann. Auf die Idee wär ich nie gekommen.

Man lernt nie aus...

Coda
2007-10-04, 14:37:58
Naja normal nimmt man dann auch eine class. Aber ein Constructor zur Initialisierung von Defaultwerten kann bei einer struct auch ganz nützlich sein finde ich.

Gast
2007-10-05, 00:03:42
Um das also ganz kurz Zusammenzufassen.

Wenn man sauberen C++ Code schreiben will, dann verwendet man am besten ausschließlich class und verzichtet auf structs, richtig?

Kann man das so sagen?

del_4901
2007-10-05, 00:59:41
Um das also ganz kurz Zusammenzufassen.

Wenn man sauberen C++ Code schreiben will, dann verwendet man am besten ausschließlich class und verzichtet auf structs, richtig?

Kann man das so sagen?
nein, zum sauberen C++ Code gehören ganz andere Sachen! Über struct oder class entscheidet allein die Größe und Anwendung der Klasse.

Neomi
2007-10-05, 01:22:11
Wenn man sauberen C++ Code schreiben will, dann verwendet man am besten ausschließlich class und verzichtet auf structs, richtig?

So macht man das, wenn man keine Strukturen verwenden will, aus welchem Grund auch immer. Wenn man aber Strukturen und Klassen nicht willkürlich einsetzt, sondern nach einem Schema, dann ist daran nichts schlechtes oder unsauberes.