494 Stimmen

Was sind die Unterschiede zwischen struct und class in C++?

Diese Frage war die bereits im Zusammenhang mit C#/.Net gestellt wurden .

Jetzt würde ich gerne die Unterschiede zwischen einer Struktur und einer Klasse in C++ kennenlernen. Bitte erörtern Sie die technischen Unterschiede sowie die Gründe für die Wahl des einen oder des anderen im OO-Design.

Ich werde mit einem offensichtlichen Unterschied beginnen:

  • Wenn Sie nicht angeben public: o private: Die Mitglieder einer Struktur sind standardmäßig öffentlich; die Mitglieder einer Klasse sind standardmäßig privat.

Ich bin sicher, dass es noch weitere Unterschiede gibt, die in den obskuren Ecken der C++-Spezifikation zu finden sind.

496voto

Assaf Lavie Punkte 67504

Sie vergessen den kniffligen 2. Unterschied zwischen Klassen und Structs.

So steht es in der Norm (§11.2.2 in C++98 bis C++11):

In Ermangelung einer Zugangsspezifikation für eine Basisklasse, wird public angenommen wenn die abgeleitete Klasse deklariert wird Struktur und private wird angenommen, wenn die Klasse deklariert wird Klasse .

Und nur der Vollständigkeit halber: Der bekanntere Unterschied zwischen class und struct ist in (11.2) definiert:

Mitglied einer Klasse, die mit der Schlüsselwort Klasse sind privat von Standard. Mitglieder einer Klasse definiert mit den Schlüsselwörtern Struktur o Gewerkschaft sind öffentlich standardmäßig.

Zusätzlicher Unterschied: das Schlüsselwort class kann zur Deklaration von Template-Parametern verwendet werden, während die struct Schlüsselwort nicht verwendet werden.

180voto

Robᵩ Punkte 153060

Zitat Die C++-FAQ ,

[7.8] Was ist der Unterschied zwischen den Schlüsselwörtern struct und class?

Die Mitglieder und Basisklassen einer struct sind standardmäßig öffentlich, während sie in Klasse, sind sie standardmäßig privat. Anmerkung: Sie sollten Ihre Basisklassen explizit öffentlich, privat oder protected machen, anstatt sich auf die Voreinstellungen verlassen.

Struktur und Klasse sind anders funktional gleichwertig.

OK, genug von dieser blitzsauberen Techno-Gerede. Gefühlsmäßig sind die meisten Entwickler einen starken Unterschied zwischen einer Klasse und einer Struktur. A struct fühlt sich einfach wie ein offener Haufen von Bits mit sehr wenig in der Art von Kapselung oder Funktionalität. A Klasse fühlt sich an wie ein lebendiges und verantwortliches Mitglied der Gesellschaft mit intelligenten Diensten, einer starken Kapselungsbarriere und einer gut definierten Schnittstelle. Da das die Konnotation ist, die die meisten Menschen bereits haben, sollten Sie wahrscheinlich den struct Schlüsselwort verwenden, wenn Sie eine Klasse haben, die sehr wenige Methoden und öffentliche Daten hat (solche Dinge gibt es in gut entworfenen Systemen!), aber ansonsten sollten Sie wahrscheinlich das Schlüsselwort class verwenden.

140voto

Jon Hanna Punkte 106367

Es lohnt sich, an die Ursprünge von C++ und die Kompatibilität mit C zu erinnern.

C hat Strukturen, es hat kein Konzept der Verkapselung, also ist alles öffentlich.

Standardmäßig öffentlich zu sein, wird im Allgemeinen als schlechte Idee angesehen, wenn man einen objektorientierten Ansatz verfolgt. Wenn man also eine Form von C entwickelt, die von Natur aus förderlich für OOP ist (man kann OO in C machen, aber es wird einem nicht helfen), was die Idee von C++ (ursprünglich "C With Classes") war, ist es sinnvoll, Mitglieder standardmäßig privat zu machen.

Andererseits, wenn Stroustrup die Semantik von struct so dass seine Mitglieder standardmäßig privat waren, wäre die Kompatibilität nicht mehr gegeben gewesen (das ist heute nicht mehr so oft der Fall, da sich die Standards auseinanderentwickelt haben, aber alle gültigen C-Programme waren auch gültige C++-Programme, was einen großen Einfluss darauf hatte, dass C++ Fuß fassen konnte).

Also ein neues Schlüsselwort, class wurde eingeführt, um genau wie eine Struktur zu sein, aber standardmäßig privat.

Wenn C++ von Grund auf neu entstanden wäre, ohne Vorgeschichte, dann hätte es wahrscheinlich nur ein einziges solches Schlüsselwort. Wahrscheinlich hätte es auch nicht den Einfluss gehabt, den es hatte.

Im Allgemeinen neigen die Leute dazu, struct zu verwenden, wenn sie etwas tun, wie structs in C verwendet werden; öffentliche Mitglieder, kein Konstruktor (solange es nicht in einer Union ist, können Sie puede Konstruktoren in Structs haben, genau wie bei Klassen, aber die Leute neigen dazu, das nicht zu tun), keine virtuellen Methoden, etc. Da Sprachen ebenso dazu dienen, mit den Menschen zu kommunizieren, die den Code lesen, wie Maschinen zu instruieren (sonst würden wir bei Assembler und rohen VM-Opcodes bleiben), ist es eine gute Idee, dabei zu bleiben.

36voto

Kasprzol Punkte 4017

Die Mitglieder der Klasse sind standardmäßig privat. Die Mitglieder von Struct sind standardmäßig öffentlich. Darüber hinaus gibt es keine weiteren Unterschiede. Siehe auch diese Frage .

32voto

crashmstr Punkte 27437

Nach Ansicht von Stroustrup in der C++ Programmiersprache :

Welchen Stil Sie verwenden, hängt von den Umständen und Ihrem Geschmack ab. Ich bevorzuge normalerweise struct für Klassen, bei denen alle Daten öffentlich sind. Ich betrachte solche Klassen als "nicht ganz richtige Typen, nur Datenstrukturen".

Funktionell gibt es keinen Unterschied außer dem öffentlichen/privaten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X