Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

storage

Treue Seele

  • »storage« ist der Autor dieses Themas

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

1

05.02.2012, 14:32

Verwendungszweck von Strukturen

Hallo Jungz,

wollte mal Fragen für was man eigentlich Strukturen verwendet,
da dies wie eine schwache Version von Klassen aussieht
welche man ja eigentlich verwendet ergibt sich mir kein richtiger
Verwendungszweck dafür.

Danke

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

05.02.2012, 14:38

Wenn du mehrere Daten über einen Typen ansprechen willst, z.B.:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
struct Name{
    string Vorname;
    string Nachname;
};

// ...

Name kauefer;
kauefer.Vorname = "Peter";
kauefer.Nachname = "Hansen";


Oder sowas, das siehst du dann schon. Man kann structs auch gut für Vektoren oder zum auslesen von Dateien benutzen (Header in struct einlesen, dann funktioniert auch sizeof(meinStruct)).

storage

Treue Seele

  • »storage« ist der Autor dieses Themas

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

3

05.02.2012, 14:44

Ja aber welchen Vorteil gegenüber einer Klasse hat dies, dort gibts keine Kapselung und nichts, eine Klasse mit gettern und settern wäre doch hier genauso gut? oder übersehe ich da was?

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

4

05.02.2012, 14:44

struct ist noch von c. Is wie du schon gesehen hast dagewesen um typen zusammen zupacken.
In c++ allerdings ist es das gleiche wie eine klasse, mit einem Unterschied: Standtartmäßig sind alle member public:

C-/C++-Quelltext

1
2
3
4
5
class Test
{
public:
...
};


<-> (equivalent zu:)

C-/C++-Quelltext

1
2
3
4
struct Test
{
...
};

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

5

05.02.2012, 14:49

Findet man auch auf Wikipedia (Google hilft ;)):

Zitat

Unterscheidung zwischen C++-Struktur und C++-Klasse

Der nicht zu vernachlässigende Unterschied zwischen C++-Strukturen und C++-Klassen besteht darin, dass die Attribute von Strukturen unveränderlicherweise immer public sind[3], also von beliebigen Funktionen verändert und angesehen werden können. Dagegen kann man die Attribute einer Klasse mit den Schlüsselwörtern "public" öffentlich machen bzw. "private" privatisieren, wobei letzteres bedeutet, dass nur explizit in der Klasse definierte Methoden auf die Attribute zugreifen können.

Mfg Harry222

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

05.02.2012, 15:00

Stell dir ein struct einfach als eine selbstgebastelte Variable vor die etwas einfacher zu handhaben ist als eine Klasse (vor allem braucht man kein new). Ich bevorzuge structs wenn ich einfach nur Daten speichern will und diese Daten nur geringfügig über Funktionen verändern will (z.B. ein "inverse" für ein vec-struct).

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

7

05.02.2012, 15:00

@Harry222: Ich hab es ausprobiert und man kann member in strukturen private machen!


Zitat

Stell dir ein struct einfach als eine selbstgebastelte Variable vor die etwas einfacher zu handhaben ist als eine Klasse (vor allem braucht man kein new). Ich bevorzuge structs wenn ich einfach nur Daten speichern will und diese Daten nur geringfügig über Funktionen verändern will (z.B. ein "inverse" für ein vec-struct).


Nö, wiso ? Bei Klassen brauchst du auch kein new. du kannst die auch auf dem stack erzeugen! Aber ich gebe dir recht, ich benutze structs auch immer wenn ich nur variablen bündeln will. Das heißt aber nicht, dass es etwas anderes wäre als eine Klasse (bis halt auf dieses standardmäßige public).

8

05.02.2012, 15:31

Wie schon erwähnt, sind die prinzipiell gleich zu Klassen.

Ich persönliche benutze Strukturen hier und da um Variablen zu bündlen. Also meist dann, wenn ich sonst eine Klasse ohne Methoden hätte. Da macht dann oft eine Kapselung einfach keinen Sinn und man kann so einfach die Variablen als public Attribute in die Struktur packen (ginge natürlich mit Klassen analog). Übrigens finde ich auch, dass grundsätzliche für alle Variablen Getter und Setter zu schreiben eine sehr miese Kapselung ist. Irgendwie scheint das so eine Standardregel zu sein, die man überall beigebracht bekommt, die für mich aber noch nie wirklcih Sinn ergeben hat. Die Argumentation ist scheinbar, dass man in den Settern vielleicht noch eine Wert Prüfung vornimmt, oder die Klasse intern so ändert, dass man den Wert bei der Abfrage erst berechnet. Aber ganz ehrlich: Ich programmiere schon relativ lange, und ich habe so etwas noch so gut wie nie genutzt.
Meine Klassen haben natürlich mitunter Getter und Setter, aber die Beziehen sich dann von der logischen denkweise her auf das Objekt und nicht auf dessen einzelne Attribute.
Lieber dumm fragen, als dumm bleiben!

storage

Treue Seele

  • »storage« ist der Autor dieses Themas

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

9

05.02.2012, 16:04

Ja aber getter und setter sind doch nix schlechtes, schreibe ja auch nciht für alle setter und getter, setter nur da wo cih sie auch brauche.

Und danke für die Erklärung.

10

05.02.2012, 16:22

Um es nochmal zusammenzufassen: In C++ gibt es nur einen einzigen Unterschied zwischen Structs und Klassen:
  • Bei Structs sind Member und Vererbung standardmäßig public.
  • Bei Klassen sind Member und Vererbung standardmäßig private.
Der Hinweis aus dem Wiki-Zitat, dass "Attribute von Strukturen unveränderlicherweise immer public" seien, ist, wie schon von Databyte angemerkt, falsch.

Aus technischer Sicht ist es also vollkommen egal, ob du Structs oder Klassen benutzt. Es ist sogar möglich, Structs von Klassen abzuleiten und umgekehrt. Per Konvention werden Structs aber meistens als POD verwendet.

Werbeanzeige