Berechtigte Einsatzgebiete von struct
-
Servus,
in Java gibt es ja keine Struct-Sprachkonstrukt. In C++ las ich, das sind Strukturen ganz ähnlich wie Klassen, die keine Methoden und nur public-Eigenschaften besitzen. Soweit so gut. Ich fand es auch praktisch, diese einfach in die Klassendatei oder main-Datei zu schreiben, wenn ich diese brauche.
Jetzt brauche ich die Hilfsstruktur in mehreren Dateien, soll ich dann lieber eine echte Klasse anlegen? Wie bündelt man üblicherweise seine structs, die man öfter braucht - in meinem Programm gibt es ohnehin eine globals.h und globals.cpp-Datei - ist dort der richtige Ort meine structs anzulegen?
Ist struct einfach ein Überbleibsel aus C-Zeiten und mit C++ sollte man immer eigene Klassen schreiben?
Wie ist es performancemäßig, gibt es da einen nennenswerten Unterschied - mein Algorithmus läuft dann nämlich schon einige Zeit und daher ist auch dies für mich wichtig zu wissen?
Danke vorab.
-
Der einzige Unterschied zwischen struct und class ist die default-Sichtbarkeit. Bei struct sind alle member/methoden standardmaessig (d.h. wenn nicht anders angegeben) public, bei class sind sie private.
Fuer mehr Details benutze bitte die Suche.
-
<a href= schrieb:
C++ FAQ: What's the difference between the keywords
struct
andclass
?">The members and base classes of astruct
arepublic
by default, while in class, they default toprivate
. Note: you should make your base classes explicitlypublic
,private
, orprotected
, rather than relying on the defaults.struct
andclass
are otherwise functionally equivalent.OK, enough of that squeaky clean techno talk. Emotionally, most developers make a strong distinction between a
class
and astruct
. Astruct
simply feels like an open pile of bits with very little in the way of encapsulation or functionality. Aclass
feels like a living and responsible member of society with intelligent services, a strong encapsulation barrier, and a well defined interface. Since that's the connotation most people already have, you should probably use the struct keyword if you have a class that has very few methods and has public data (such things do exist in well designed systems!), but otherwise you should probably use the class keyword.
-
Ich kenne zwei Arten von Entwicklern: Die einen (zu denen zähle ich mich) sehen es einfach technisch nüchtern und benutzen immer class. Die Anderen sind etwas vorsichtiger und benutzen wann immer es geht struct um nicht versehentlich durch ein falsch gesetztes Keyword odgl. sich alles kaputt zu machen.
-
Jay1980 schrieb:
in Java gibt es ja keine Struct-Sprachkonstrukt. In C++ las ich, das sind Strukturen ganz ähnlich wie Klassen, die keine Methoden und nur public-Eigenschaften besitzen.
Structs können genau so Methoden haben. Der einzige Unterschied ist wirklich nur die default-Sichtbarkeit.
Jay1980 schrieb:
Ich fand es auch praktisch, diese einfach in die Klassendatei oder main-Datei zu schreiben, wenn ich diese brauche.
Geht doch mit class genau so. Wenn ich jetzt richtig verstanden hab was du meinst.
Jay1980 schrieb:
Ist struct einfach ein Überbleibsel aus C-Zeiten und mit C++ sollte man immer eigene Klassen schreiben?
Nein das hat nix mit C zu tun. Structs sind genau so ein Bestandteil von C++.
Jay1980 schrieb:
Wie ist es performancemäßig, gibt es da einen nennenswerten Unterschied - mein Algorithmus läuft dann nämlich schon einige Zeit und daher ist auch dies für mich wichtig zu wissen?
Kann ich mir nicht vorstellen dass es da Performance-Unterschiede gibt.
Wüsste nicht warum. Der Optimizer wird ein Struct genau so verarbeiten wie eine Klasse.Also ich benutze struct eigentlich nur bei kleinen Sachen, wo alles public sein soll und spar mit halt die Zeile
public:
Zum Beispiel find ich für solche Sachen struct viel sinnvoller:
struct point { double x_coord, y_coord; }; struct lines { point p1, p2; };
-
Ursprünglich in C war ein struct nur eine reine Datenstruktur. C++ hat dann Klassen mit class eingeführt, in der damit zusätzlich Funktionen private oder public bereitgestellt werden konnten. Weil das von allgemeinen Interesse war kann man bei neueren C++ Compilern auch struct statt class verwenden. Hängt also vom Compiler ab, was erlaubt ist oder nicht.
-
Okay, danke.
Ich habe mir angewöhnt, dass ich für jede Klasse eine eigene Header-Datei und eine cpp-Datei anlege, die structs knallte ich aber einfach in die gleiche Datei in der diese gebraucht wurden.
Also, wenn ich das richtig sehe ist mein Ansatz, in mehreren Dateien benötigte structs einmalig in der Header-Datei 'global.h' zu definieren - sowohl technisch wie auch aus programmierphilosophischer Sicht akzeptabel?
-
Ich persönlich verwende immer struct, wenn es keine privaten Elemente gibt und sonst class.
Also, wenn ich das richtig sehe ist mein Ansatz, in mehreen Dateien benötigte structs einmalig in der Header-Datei 'global.h' zu definieren - sowohl technisch wie auch aus programmierphilosophischer Sicht akzeptabel?
Wenn man eine struct- oder class-Definition in mehreren Übersetzungseinheiten braucht, dann packt man diese üblicherweise in eine Header-Datei, ja. Du kannst die Definition natürlich auch doppelt und dreifach i, Programm stehen haben. Aber das ist sehr fehleranfällig; denn die Definitionen müssen identisch sein.
Du solltest Dich intensiver mit C++ auseinandersetzen, indem Du Dir ein gutes Buch besorgst. Eines der wichtigen Dinge, die Du darin nachlesen solltest, ist die "ODR" (one definition rule). Das kann man sich jetzt auch nicht selbst zusammenreimen, was die genau bedeutet. Wichtig ist es aber...
-
Jay1980 schrieb:
Also, wenn ich das richtig sehe ist mein Ansatz, in mehreren Dateien benötigte structs einmalig in der Header-Datei 'global.h' zu definieren - sowohl technisch wie auch aus programmierphilosophischer Sicht akzeptabel?
Ja, sonst findet der Compiler die eingesetzten structs nicht. Das gilt aber für auf einzelne Sourcedateien verteilte Programme für alle Deklarationen wie auch Variablen und Prototypen.