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.

2voto

ymett Punkte 2415

Die anderen Antworten haben die private/public-Vorgaben erwähnt (aber beachten Sie, dass eine struct eine Klasse eine struct ist; es sind nicht zwei verschiedene Elemente, sondern nur zwei Arten, dasselbe Element zu definieren).

Was interessant sein könnte (insbesondere, da der Fragesteller wahrscheinlich MSVC++ verwendet, da er "unmanaged" C++ erwähnt), ist, dass Visual C++ sich unter bestimmten Umständen beschwert, wenn eine Klasse mit class und dann definiert mit struct (oder möglicherweise umgekehrt), obwohl die Norm besagt, dass dies völlig legal ist.

2voto

nutario Punkte 773

Hier ist eine gute Erklärung: http://carcino.gen.nz/tech/cpp/struct_vs_class.php

Also, noch einmal: In C++ ist eine Struktur mit einer Klasse identisch, mit dem Unterschied, dass die Mitglieder einer Struktur standardmäßig öffentlich sichtbar sind, während die Mitglieder einer Klasse standardmäßig privat sichtbar sind.

2voto

finnw Punkte 46519

Es ist nur eine Konvention. Strukturen können erstellt werden, um einfache Daten zu speichern, aber später mit der Zeit durch das Hinzufügen von Mitgliedsfunktionen und Konstruktoren weiterentwickelt werden. Andererseits ist es ungewöhnlich, in einer Struktur etwas anderes als public: access zu sehen.

1voto

yshivakathik Punkte 51
  • . In Klassen sind alle Mitglieder standardmäßig privat, aber in Strukturen sind die Mitglieder standardmäßig öffentlich.

    1. Es gibt keinen Begriff wie Konstruktor und Destruktor für Structs, aber für Klassen erstellt der Compiler einen Standardwert, wenn Sie keine Angaben machen.

    2. Die Größe einer leeren Struktur ist 0 Byte und die Größe einer leeren Klasse ist 1 Byte. Der Standardzugriffstyp der Struktur ist öffentlich. Eine Struktur sollte typischerweise für die Gruppierung von Daten verwendet werden.

    Die Standardzugriffsart der Klasse ist privat, und der Standardmodus für Vererbung ist privat. Eine Klasse sollte für die Gruppierung von Daten und Methoden, die mit diesen Daten arbeiten.

    Kurz gesagt, die Konvention ist es, struct zu verwenden, wenn der Zweck darin besteht Daten zu gruppieren, und Klassen zu verwenden, wenn wir Datenabstraktion und, vielleicht Vererbung.

    In C++ werden Strukturen und Klassen als Wert übergeben, sofern nicht ausdrücklich de-referenziert. In anderen Sprachen können Klassen und Strukturen eine unterschiedliche Semantiken haben - d.h. Objekte (Instanzen von Klassen) können per Referenz und Strukturen per Wert übergeben werden. Hinweis: Zu dieser Frage gibt es Kommentare zu dieser Frage. Siehe die Diskussionsseite zu zur Diskussion beizutragen.

1voto

UKMonkey Punkte 6791

Es wird zwar in anderen Antworten angedeutet, aber nicht explizit erwähnt, dass Structs je nach Verwendung C-kompatibel sind; Klassen sind es nicht.

Das bedeutet, wenn Sie einen Header schreiben, der C-kompatibel sein soll, haben Sie keine andere Möglichkeit als struct (das in der C-Welt keine Funktionen haben kann, aber Funktionszeiger).

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