2009-02-12 5 views
17

Wann sollte jemand in C++ Strukturen anstelle von Klassen oder umgekehrt verwenden? Ich finde, dass ich Strukturen benutze, wenn eine vollwertige Klasse, die einige Informationen verwaltet, übertrieben erscheint, aber anzeigen möchte, dass die enthaltenen Informationen alle miteinander verwandt sind. Ich habe mich gefragt, was sind gute Richtlinien, um sagen zu können, wann einer geeigneter ist als der andere?Structs vs Klassen in C++

Edit: diese Links gefunden, während das Material Stapelüberlauf angezeigt Lesen verwandt war, nachdem die Frage gestellt wurde:

When should you use a class vs a struct in C++?
What are the differences between struct and class in C++?

+0

so das ist ein Duplikat dann – ChrisW

Antwort

14

Technisch gesehen ist der einzige Unterschied zwischen den beiden ist, dass structs öffentlich sind: standardmäßig und Klassen sind privat:

Abgesehen davon, gibt es keinen technischen Unterschied.

struct vs class wird dann zu einer rein expressiven Nuance der Sprache.

Normalerweise vermeiden Sie komplizierte Methoden in einer Struktur zu setzen, und die Struktur der Datenmitglieder bleibt meistens öffentlich. In einer Klasse möchten Sie eine starke Kapselung erzwingen.

struct = Daten sind öffentlich, mit sehr einfachen Hilfsmethoden

class = stark gekapselt, Daten/nur über Methoden zugegriffen modifizieren

+0

Allerdings forderte das OP für Richtlinien, die auf die expressive Nuance abhängen. –

2

Verwenden Sie eine Klasse, wenn Sie Methoden, eine Struktur, wenn nicht .

Eine Klasse sollte alle ihre Interna nur mit Methoden oder Eigenschaften ausstellen. Eine Struktur neigt dazu, alle ihre Interna zu offenbaren und hat keine Zugriffsmethoden.

Wenn nur ein Bit Code auf einige (verwandte) Daten zugreift, kann eine Struktur durchaus sinnvoll sein. Wenn mehrere Bits Code die Daten ändern müssen oder wenn es etwas schwierig ist, wäre eine Klasse eine bessere Wette.

5

I structs für einfache Behälter von Typen verwenden, die keine Konstrukteure und Betreiber bieten .

Klassen für alles andere.

1

Der Unterschied zwischen Klassen und Strukturen besteht darin, dass Strukturen Gruppen von Variablen sind und Klassen Objekte darstellen. Objekte haben Attribute UND-Methoden und sind Teil einer Hierarchie.

Wenn Sie C++ verwenden, um die OO-Funktionen zu nutzen, verwenden Sie am besten natürlichere Klassen/Objekte.

+0

beste Antwort, die ich je gesehen habe "Strukturen sind Gruppen von Variablen und Klassen repräsentieren Objekte" – Glolita

0

Ich persönlich structs verwenden, wenn alles was ich brauche ist ein Container für Daten (keine Member-Funktionen) ist. Ansonsten verwende ich Klassen.

Die einzige Zeit, die ich eine Ausnahme zu dieser Regel mache, ist, wenn ich einen einfachen funktor benötige: z.B.

struct compare { bool operator() { ... } }; 
sort(v.begin(), v.end(), compare()); 

Die Notwendigkeit einer public: Label würde den Code unnecessarity nur vollstopfen.

+0

Das ist so ziemlich Google C++ Richtlinie. Nicht dass ich ihren Richtlinien in vielen anderen Aspekten folge/mag. –

0

Strukturen in C++ sind Klassen mit einer Standardzugriffsmethode von public, also technisch anders als die Standard gibt es keinen Unterschied und Sie können beide äquivalent verwenden.

Dennoch gibt es einige Erwartungen und natürliche Tendenzen, zum Teil, weil structs in C von C++ kommt

Mein Ansatz: Wenn es irgendwelche private Daten, einen Konstruktor/Destruktor, oder bei einer komplexen Elementfunktion (das tun mehr als nur Konvertierung nach set/get, etc.), benutze Klasse.

1

Ich verwende immer Klasse, auch für nur Container, für die Konsistenz. Es ist nur eine Wahl des Stils, da der Unterschied zwischen den beiden vernachlässigbar ist.

4

Verwenden Sie eine Struktur, wenn Sie einfach einen "Eimer mit Zeug" brauchen, der keine logischen Invarianten hat, die Sie behalten müssen. Verwenden Sie eine Klasse für alles andere.

Siehe auch, was die C++ FAQ says on the subject.

1

Wenn Sie Zugriff auf die Daten steuern müssen, sollten Sie Klassen verwenden. Wenn es Ihnen egal ist, wer auf was zugreift und was dort gespeichert wird, dann ist eine Struktur wahrscheinlich besser geeignet.

Auch eine Klasse ist geeigneter, wenn Sie die Integrität der Daten selbst überprüfen müssen.

+1

Ich fand zwei downvotes zu dieser Antwort, die mir sehr gut aussieht. Was gibt? –

+0

Schlägt mich. Habe ich hier etwas falsch gemacht? Wenn ich mich total irre, dann würde ich gerne wissen, wie ... –

+0

thx. Es interessiert mich nicht wirklich, ob es die bestbewertete Antwort ist; Ich will nur wissen, warum es falsch war ... anscheinend dachten 2 Leute, dass es etwas falsch ist. Ah, gut. –