Diese Frage wurde bereits im Zusammenhang mit C # /. Net gestellt .
Jetzt möchte ich die Unterschiede zwischen einer Struktur und einer Klasse in C ++ lernen. Bitte besprechen Sie die technischen Unterschiede sowie die Gründe für die Wahl des einen oder anderen im OO-Design.
Ich werde mit einem offensichtlichen Unterschied beginnen:
- Wenn Sie nicht angeben ,
public:
oder dieprivate:
Mitglieder einer Struktur sind standardmäßig öffentlich; Mitglieder einer Klasse sind standardmäßig privat.
Ich bin sicher, dass es in den dunklen Ecken der C ++ - Spezifikation noch andere Unterschiede gibt.
struct
C und C ++? Siehe hier .struct
in C ++ bedeutet. ;) Aber es gibt keinen Grund, warum Sie dasclass
Schlüsselwort nicht stattdessen verwenden können.Antworten:
Sie vergessen den kniffligen zweiten Unterschied zwischen Klassen und Strukturen.
Quoth der Standard (§11.2.2 in C ++ 98 bis C ++ 11):
Der Vollständigkeit halber ist der bekanntere Unterschied zwischen Klasse und Struktur in (11.2) definiert:
Zusätzlicher Unterschied: Mit dem Schlüsselwort
class
können Vorlagenparameter deklariert werden, während dasstruct
Schlüsselwort nicht verwendet werden kann.quelle
class
public" verwendenstruct
, und beide definieren einen Klassentyp.struct
undclass
darin, dass Letzteres anstelle von a verwendet werden kanntypename
, um einen Vorlagenparameter zu deklarieren, während Ersteres dies nicht kann.:)
Zitieren der C ++ - FAQ ,
quelle
Es lohnt sich, sich an die Ursprünge von C ++ und die Kompatibilität mit C zu erinnern.
C hat Strukturen, es hat kein Konzept der Kapselung, also ist alles öffentlich.
Standardmäßig öffentlich zu sein, wird im Allgemeinen als schlechte Idee angesehen, wenn Sie einen objektorientierten Ansatz verfolgen. Wenn Sie also eine Form von C erstellen, die OOP nativ förderlich ist (Sie können OO in C ausführen, aber es hilft Ihnen nicht), war dies die richtige In C ++ (ursprünglich "C With Classes") ist es sinnvoll, Mitglieder standardmäßig privat zu machen.
Wenn Stroustrup andererseits die Semantik von geändert hätte,
struct
sodass seine Mitglieder standardmäßig privat waren, hätte dies die Kompatibilität beeinträchtigt (dies ist nicht mehr so oft der Fall, wie die Standards auseinander gingen, aber alle gültigen C-Programme waren auch gültige C ++ - Programme. was einen großen Einfluss darauf hatte, C ++ Fuß zu fassen).Daher wurde ein neues Schlüsselwort
class
eingeführt, das genau wie eine Struktur ist, aber standardmäßig privat.Wenn C ++ ohne Verlauf von Grund auf neu erstellt worden wäre, hätte es wahrscheinlich nur ein solches Schlüsselwort. Es hätte wahrscheinlich auch nicht die Wirkung erzielt, die es machte.
Im Allgemeinen neigen Menschen dazu, struct zu verwenden, wenn sie etwas tun, wie structs in C verwendet werden. öffentliche Mitglieder, kein Konstruktor (solange es nicht in einer Gewerkschaft ist, Sie können Konstrukteure in structs haben, genau wie bei Klassen, aber die Menschen sind in der Regel nicht zu), keine virtuellen Methoden usw. Da Sprachen so viel zu kommunizieren Leute, die den Code lesen, um Maschinen anzuweisen (oder wir würden uns an Assembly- und rohe VM-Opcodes halten), ist eine gute Idee, sich daran zu halten.
quelle
struct
einer*.c
Datei in einer Datei ausblenden und andere Übersetzungseinheiten nur mit einem Zeiger verwenden lassen. Sie haben also eine noch stärkere Kapselung, da andere Übersetzungseinheiten nicht einmal wissen, was sich in der befindetstruct
.Die Mitglieder der Klasse sind standardmäßig privat. Die Mitglieder von Struct sind standardmäßig öffentlich. Ansonsten gibt es keine weiteren Unterschiede. Siehe auch diese Frage .
quelle
struct
undclass
deklarieren eine Klasse mit identischer Semantik (ungeachtet der parsenweisen Interpretation des Definitionskörpers).Laut Stroustrup in der Programmiersprache C ++ :
Funktionell gibt es keinen anderen Unterschied als öffentlich / privat
quelle
STRUCT ist eine Art abstrakter Datentyp, der einen bestimmten Speicherbereich gemäß der Strukturspezifikation aufteilt. Strukturen sind besonders nützlich bei der Serialisierung / Deserialisierung von Dateien, da die Struktur häufig wörtlich in die Datei geschrieben werden kann. (dh Erhalten Sie einen Zeiger auf die Struktur, berechnen Sie mit dem SIZE-Makro die Anzahl der zu kopierenden Bytes und verschieben Sie die Daten in die Struktur hinein oder aus der Struktur heraus.)
Klassen sind ein anderer Typ eines abstrakten Datentyps, der versucht, das Ausblenden von Informationen sicherzustellen. Intern kann es eine Vielzahl von Machenschaften, Methoden, Temperaturvariablen und Zustandsvariablen geben. usw., die alle verwendet werden, um jedem Code, der die Klasse verwenden möchte, eine konsistente API zu präsentieren.
In der Tat geht es bei Strukturen um Daten, bei Klassen um Code.
Sie müssen jedoch verstehen, dass dies lediglich Abstraktionen sind. Es ist durchaus möglich, Strukturen zu erstellen, die Klassen sehr ähnlich sehen, und Klassen, die Strukturen sehr ähnlich sehen. Tatsächlich waren die frühesten C ++ - Compiler lediglich Pre-Compiler, die C ++ - Code in C übersetzen. Daher sind diese Abstraktionen ein Vorteil für das logische Denken und nicht unbedingt eine Bereicherung für den Computer selbst.
Abgesehen von der Tatsache, dass jede eine andere Art von Abstraktion ist, bieten Klassen Lösungen für das C-Code-Namensrätsel. Da nicht mehr als eine Funktion mit demselben Namen verfügbar gemacht werden kann, folgten Entwickler einem Muster von _ (). zB mathlibextreme_max (). Durch Gruppieren von APIs in Klassen können ähnliche Funktionen (hier als "Methoden" bezeichnet) zusammengefasst und vor der Benennung von Methoden in anderen Klassen geschützt werden. Dadurch kann der Programmierer seinen Code besser organisieren und die Wiederverwendung von Code erhöhen. Zumindest theoretisch.
quelle
struct
Schlüsselwort zu erstellen .struct
Klassen (einschließlichpublic
/private
/protected
, Vererbung usw.).SIZE
Makro, von dem du sprichst?1) Mitglieder einer Klasse sind standardmäßig privat und Mitglieder von struct sind standardmäßig öffentlich.
Zum Beispiel schlägt Programm 1 beim Kompilieren fehl und Programm 2 funktioniert einwandfrei.
2) Wenn eine Struktur von einer Klasse / Struktur abgeleitet wird, ist der Standardzugriffsspezifizierer für eine Basisklasse / Struktur öffentlich. Beim Ableiten einer Klasse ist der Standardzugriffsspezifizierer privat.
Zum Beispiel schlägt Programm 3 beim Kompilieren fehl und Programm 4 funktioniert einwandfrei.
quelle
Der einzige andere Unterschied ist die Standardvererbung von Klassen und Strukturen, die nicht überraschend privat bzw. öffentlich ist.
quelle
Dies ist auf VS2005.
quelle
_tmain
ist nicht Standard C ++.Nicht in der Spezifikation, nein. Der Hauptunterschied besteht in den Erwartungen der Programmierer, wenn sie Ihren Code in 2 Jahren lesen. Strukturen werden oft als POD angenommen. Strukturen werden auch bei der Metaprogrammierung von Vorlagen verwendet, wenn Sie einen Typ für andere Zwecke als das Definieren von Objekten definieren.
quelle
Wenn Sie eine Legacy-App mit Strukturen zur Verwendung von Klassen aktualisiert haben, tritt möglicherweise Folgendes auf:
Alter Code hat Strukturen, Code wurde bereinigt und diese in Klassen geändert. Ein oder zwei virtuelle Funktionen wurden dann der neuen aktualisierten Klasse hinzugefügt.
Wenn sich virtuelle Funktionen in Klassen befinden, fügt der Compiler den Klassendaten intern einen zusätzlichen Zeiger hinzu, um auf die Funktionen zu verweisen.
Dies würde alten Legacy-Code beschädigen, wenn im alten Code irgendwo die Struktur mit memfill gelöscht würde, um alles auf Null zu löschen, würde dies auch die zusätzlichen Zeigerdaten stampfen.
quelle
calloc
zugunsten von vermieden wirdnew
. Alles, was man tun kann, ist sicherzustellen, dass alle vom C-Teil des Codes verwendeten Strukturen tatsächlich PODS sind.Mitglieder einer mit dem Schlüsselwort definierten Klasse
class
sindprivate
standardmäßig. Mitglieder einer Klasse, die mit den Schlüsselwörternstruct
(oderunion
) definiert ist, sindpublic
standardmäßig.In Abwesenheit eines Zugriffsspezifizierers für eine Basisklasse
public
wird angenommen, wenn die abgeleitete Klasse deklariert wird,struct
undprivate
wird angenommen, wenn die Klasse deklariert wirdclass
.Sie können ein
enum class
aber kein deklarierenenum struct
.Sie können
template<class T>
aber nicht verwendentemplate<struct T>
.Beachten Sie auch, dass Sie mit dem C ++ - Standard einen Typ als de vorwärts deklarieren
struct
und dannclass
beim Deklarieren des Typs verwenden können und umgekehrt. Auchstd::is_class<Y>::value
isttrue
für Y einstruct
und einclass
, aber istfalse
für einenum class
.quelle
struct
undclass
in c ++ ist ein Unterschied zwischen Schlüsselwörtern, nicht zwischen Datentypen (oder einer besseren Alternative;)std::is_class<Y>::value
abdeckt?Der Unterschied zwischen
class
undstruct
ist ein Unterschied zwischen Schlüsselwörtern, nicht zwischen Datentypen. Diese zweibeide definieren einen Klassentyp. Der Unterschied der Schlüsselwörter in diesem Kontext ist der unterschiedliche Standardzugriff:
foo::x
ist öffentlich undfoo_base
wird öffentlich vererbtbar::x
ist privat undbar_base
wird privat vererbtquelle
Hier ist eine gute Erklärung: http://carcino.gen.nz/tech/cpp/struct_vs_class.php
quelle
Es ist nur eine Konvention. Strukturen können erstellt werden, um einfache Daten zu speichern, aber später durch Hinzufügen von Elementfunktionen und Konstruktoren die Zeit weiterentwickeln. Andererseits ist es ungewöhnlich, etwas anderes als öffentlich zu sehen: Zugriff in einer Struktur.
quelle
quelle
Ein weiterer Hauptunterschied besteht in Bezug auf Vorlagen. Soweit ich weiß, können Sie eine Klasse verwenden, wenn Sie eine Vorlage definieren, aber KEINE Struktur.
quelle
struct
ist dort nicht nur durch Konvention erlaubt (besser gesagt, es ist einclass
Schlüsselwort, das hier in einem anderen Sinne verwendet wird, siehe Verwenden von 'Klasse' oder 'Typname' für Vorlagenparameter ).struct
fein definiert haben . Probieren Sie es einfach aus.struct T{}; template <typename T> void foo() {} foo<T>();
In den anderen Antworten wurden die privaten / öffentlichen Standardeinstellungen erwähnt (beachten Sie jedoch, dass eine Struktur eine Klasse ist; es handelt sich nicht um zwei verschiedene Elemente, sondern nur um zwei Arten, dasselbe Element zu definieren).
Was interessant sein könnte (insbesondere da der Fragesteller wahrscheinlich MSVC ++ verwendet, da er "nicht verwaltetes" C ++ erwähnt), ist, dass sich Visual C ++ unter bestimmten Umständen beschwert, wenn eine Klasse mit deklariert
class
und dann mitstruct
(oder möglicherweise umgekehrt) definiert wird ), obwohl der Standard besagt, dass dies vollkommen legal ist.quelle
. In Klassen sind standardmäßig alle Mitglieder privat, in der Struktur sind Mitglieder standardmäßig öffentlich.
Es gibt keinen Begriff wie Konstruktor und Destruktor für Strukturen, aber für Klassen-Compiler wird Standard erstellt, wenn Sie dies nicht angeben.
Größe der leeren Struktur ist 0 Bytes wer als Größe der leeren Klasse ist 1 Byte Der Standardzugriffstyp der Struktur ist öffentlich. Eine Struktur sollte normalerweise zum Gruppieren von Daten verwendet werden.
Der Standardzugriffstyp der Klasse ist privat und der Standardmodus für die Vererbung ist privat. Eine Klasse sollte zum Gruppieren von Daten und Methoden verwendet werden, die mit diesen Daten arbeiten.
Kurz gesagt, die Konvention besteht darin, struct zu verwenden, wenn der Zweck darin besteht, Daten zu gruppieren, und Klassen zu verwenden, wenn Datenabstraktion und möglicherweise Vererbung erforderlich sind.
In C ++ werden Strukturen und Klassen als Wert übergeben, sofern nicht ausdrücklich darauf verwiesen wird. In anderen Sprachen können Klassen und Strukturen unterschiedliche Semantiken haben - dh. Objekte (Instanzen von Klassen) können als Referenz übergeben werden und Strukturen können als Wert übergeben werden. Hinweis: Mit dieser Frage sind Kommentare verknüpft. Weitere Informationen zur Konversation finden Sie auf der Diskussionsseite.
quelle
g++
. Sie denken vielleicht an die Optimierung der leeren Basis, aber das gilt auch für beide.struct
vollwertige Klassen in C ++.Obwohl dies durch andere Antworten impliziert wird, wird nicht explizit erwähnt, dass Strukturen je nach Verwendung C-kompatibel sind. Klassen sind nicht.
Dies bedeutet, wenn Sie einen Header schreiben, der C-kompatibel sein soll, haben Sie keine andere Option als struct (die in der C-Welt keine Funktionen haben kann, aber Funktionszeiger haben kann).
quelle
Sie können dies als Richtlinie für die Entscheidung für Struktur oder Klasse unter https://msdn.microsoft.com/en-us/library/ms229017%28v=vs.110%29.aspx betrachten .
quelle
Klasse ist nur im Kontext der Softwareentwicklung sinnvoll. Im Kontext von Datenstrukturen und Algorithmen unterscheiden sich Klasse und Struktur nicht so stark. Es gibt keine eingeschränkte Regel, dass auf das Mitglied der Klasse verwiesen werden muss.
Wenn Sie ein großes Projekt mit Tonnen von Menschen ohne Klasse entwickeln, erhalten Sie möglicherweise endlich komplizierten gekoppelten Code, da jeder die gewünschten Funktionen und Daten verwendet. Klasse bietet Berechtigungssteuerelemente und Inhärenten, um die Entkopplung und Wiederverwendung von Codes zu verbessern.
Wenn Sie einige Prinzipien der Softwareentwicklung lesen, werden Sie feststellen, dass die meisten Standards ohne Unterricht nicht einfach implementiert werden können. Zum Beispiel: http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29
Übrigens: Wenn eine Struktur eine Speicherknappheit zuweist und mehrere Variablen enthält, geben Werttypvariablen an, dass Werte dort eingebettet sind, wo die Struktur zugewiesen ist. Im Gegensatz dazu sind die Werte der Referenztypvariablen extern und werden durch einen Zeiger referenziert, der auch in die Zuordnung von struct eingebettet ist.
quelle
struct
Klassen (einschließlich Berechtigungssteuerelemente, Vererbung usw.).Der Unterschied zwischen Struktur- und Klassenschlüsselwörtern in C ++ besteht darin, dass, wenn es keinen bestimmten Bezeichner für einen bestimmten zusammengesetzten Datentyp gibt, standardmäßig struct oder union die öffentlichen Schlüsselwörter sind, die lediglich das Ausblenden von Daten berücksichtigen, class jedoch das private Schlüsselwort ist, das das Ausblenden von Programmen berücksichtigt Codes oder Daten. Einige Programmierer verwenden immer struct für Daten und class für Code. Weitere Informationen erhalten Sie bei anderen Quellen.
quelle
struct
Mitglieder standardmäßig öffentlich sind, und die akzeptierte Antwort aus dem Jahr 2009 erwähnt die Vererbung. Warum eine weitere Antwort schreiben, die 4 Jahre später keine neuen Informationen hinzufügt?Aus all diesen Faktoren kann geschlossen werden, dass die Konzeptklasse sehr gut geeignet ist, Objekte der realen Welt und nicht "Strukturen" darzustellen. Hauptsächlich, weil OOP-Konzepte, die im Unterricht verwendet werden, sehr praktisch sind, um Szenarien der realen Welt zu erklären, daher einfacher, sie mit der Realität zusammenzuführen. Zum Beispiel ist die Standardvererbung für Strukturen öffentlich, aber wenn wir diese Regel für die reale Welt anwenden, ist sie lächerlich. Aber in einer Klasse ist die Standardvererbung privat, was realistischer ist.
Was ich jedoch rechtfertigen muss, ist, dass Klasse ein viel breiteres, in der realen Welt anwendbares Konzept ist, während Struktur ein primitives Konzept mit schlechter interner Organisation ist (obwohl Struktur OOP-Konzepten folgt, haben sie eine schlechte Bedeutung).
quelle
Der Hauptunterschied zwischen Struktur- und Klassenschlüsselwort in oops besteht darin, dass in der Struktur keine öffentliche und private Mitgliedsdeklaration vorhanden ist und die Datenelement- und Mitgliedsfunktion als öffentlich, privat sowie geschützt definiert werden kann.
quelle
struct
Klassen (einschließlichpublic
/private
/protected
, Vererbung usw.).** UPDATE: ** Bitte ignorieren Sie diese Antwort. Ich habe die Möglichkeit nicht in Betracht gezogen, dass der Wert für die Struktur nicht initialisiert wurde, sondern zufällig 0 war. Es gibt keinen Initialisierungsunterschied zwischen Struktur und Klasse.
Ich sehe einen anderen Unterschied zwischen Strukturen und Klassen, der mit der Standardinitialisierung zu tun hat.
Führen Sie diesen Code aus und untersuchen Sie myTester. Sie werden feststellen, dass für m_Foo die Struktur m_Foo.a auf 0 initialisiert wurde, für m_Bar die Klasse m_Bar.a jedoch nicht initialisiert ist. Es scheint also einen Unterschied zu geben, was der Standardkonstruktor für struct vs. class tut. Ich sehe das mit Visual Studio.
quelle
m_Foo.a
initialisiert wurde? Was wäre, wenn es nicht initialisiert wäre und zufällig wäre0
?Der Hauptunterschied zwischen struct und class besteht darin, dass Sie in struct nur Datenvariablen verschiedener Datentypen deklarieren können, während Sie in class Datenvariablen und Elementfunktionen deklarieren und somit Datenvariablen über Funktionen bearbeiten können.
-> Eine weitere nützliche Sache, die ich in class vs struct finde, ist, dass Sie beim Implementieren von Dateien in einem Programm, wenn Sie bei jeder neuen Gruppe von Operationen immer wieder Operationen an einer Struktur ausführen möchten, eine separate Funktion erstellen müssen und müssen Übergeben Sie das Objekt struct nach dem Lesen aus der Datei, um einige Operationen daran durchzuführen. Wenn Sie im Unterricht eine Funktion erstellen, die jedes Mal einige Operationen an den benötigten Daten ausführt, müssen Sie nur das Objekt aus der Datei lesen und die Funktion aufrufen.
Aber es hängt vom Programmierer ab, auf welche Weise er / sie es für geeignet hält ... meiner Meinung nach bevorzuge ich jedes Mal Unterricht, nur weil es OOPs unterstützt, und das ist der Grund, warum es in fast allen Sprachen implementiert ist und das wunderbare Merkmal aller Zeitprogrammierung ist; - )
Und ja, der unvergessenste Unterschied, den ich vergessen habe zu erwähnen, ist, dass die Klasse das Ausblenden von Daten unterstützt und auch Operationen unterstützt, die für eingebaute Datentypen ausgeführt werden, während struct dies nicht tut!
quelle
struct
können Mitgliedsfunktionen habenstruct
kann Konstruktoren, Mitgliedsfunktionen und Distruktoren haben (möglicherweise virtuell, möglicherweise privat, geschützt oder öffentlich). Sie können erben und vererbt werden. Also eigentlich ... alles, was eine Klasse haben kann. Eine typische Konvention besteht darin, mit struct zu deklarieren, was Sie in C als struct deklariert hätten, und als Klasse, wenn wir private und geschützte Variablen, virtuelle Funktionen, ctor und dtor usw. deklarieren. Aber es ist nur eine Konvention, die nicht von der Sprache durchgesetzt wirdIch habe einen anderen Unterschied gefunden. Wenn Sie keinen Konstruktor in einer Klasse definieren, definiert der Compiler einen. Wenn Sie jedoch in einer Struktur keinen Konstruktor definieren, definiert der Compiler auch keinen Konstruktor. In einigen Fällen, in denen wir wirklich keinen Konstruktor benötigen, ist struct die bessere Wahl (Leistungstipp). und Entschuldigung für mein schlechtes Englisch.
quelle
struct
Schlüsselwort definierten Klasse und einer mit demclass
Schlüsselwort definierten Klasse .Klassen sind Referenztypen und Strukturen sind Wertetypen.
Wenn ich sage, dass Klassen Referenztypen sind,
enthalten sie im Grunde die Adresse einer Instanzvariablen.
Zum Beispiel:
In der Hauptmethode kann
ich eine Instanz dieser Klasse mit einem neuen Operator erstellen, der Speicher für diese Klasse
zuweist und deren Basisadresse in der Variablen vom Typ MyClass (_myClassObject2) speichert.
Im obigen Programm ist MyClass _myClassObject2 = _myClassObject1; Anweisung gibt an, dass beide Variablen vom Typ MyClass sind
und zeigt auf denselben Speicherort.
Grundsätzlich wird derselbe Speicherort einer anderen Variablen des gleichen Typs zugewiesen.
Wenn also Änderungen, die wir an einem der Objekttypen MyClass vornehmen, Auswirkungen auf einen anderen haben, zeigen
beide auf denselben Speicherort.
"_myClassObject1.DataMember = 10;" In dieser Zeile enthalten beide Datenelemente des Objekts den Wert 10.
"_myClassObject2.DataMember = 20;" In dieser Zeile enthält das Datenelement des Objekts den Wert 20.
Schließlich greifen wir über Zeiger auf Datenelemente eines Objekts zu.
Im Gegensatz zu Klassen sind Strukturen Werttypen. Zum Beispiel:
Im obigen Programm wird
das Objekt vom Typ MyStructure mithilfe eines neuen Operators instanziiert und die
Adresse in der Variablen _myStructObject vom Typ MyStructure und gespeichert
dem Datenelement der Struktur mit "_myStructObject1.DataMember = 10" der Wert 10 zugewiesen.
In der nächsten Zeile
deklariere ich eine andere Variable _myStructObject2 vom Typ MyStructure und weise ihr _myStructObject1 zu.
Hier erstellt der .NET C # -Compiler eine weitere Kopie des Objekts _myStructureObject1 und
weist diesen Speicherort der MyStructure-Variablen _myStructObject2 zu.
Was auch immer wir an _myStructObject1 ändern, wird sich niemals auf eine andere Variable _myStructObject2 vom Typ MyStructrue auswirken.
Deshalb sagen wir, dass Strukturen Werttypen sind.
Die unmittelbare Basisklasse für die Klasse ist also Object und die unmittelbare Basisklasse für Structure ist ValueType, das von Object erbt.
Klassen unterstützen eine Vererbung, Strukturen dagegen nicht.
Wie sagen wir das?
Und was ist der Grund dafür?
Die Antwort lautet Klassen.
Es kann abstrakt, versiegelt, statisch und teilweise sein und kann nicht privat, geschützt und intern geschützt sein.
quelle
struct
und gibtclass
. Niemand hier hat es erwähnt, noch das gesamte Web. Ich denke also, dass dies auch nicht für C ++ gilt.int a = 3; int b = a;
und ähnlichMyStruct a=MyStruct("data"); MyStruct b = a;
Es gibt 3 grundlegende Unterschiede zwischen Struktur und Klasse
1St-Speicher sind für die Struktur im Stapelspeicher (der der Programmiersprache nahe kommt) reserviert, unabhängig davon, ob für Klassen im Stapelspeicher nur Verweise reserviert sind und der tatsächliche Speicher im Heapspeicher reserviert ist.
2Nd - Standardmäßig wird die Struktur als öffentlich behandelt, unabhängig davon, ob die Klasse als privat behandelt wird.
3Rd- kann Code in der Struktur nicht wiederverwenden, aber in der Klasse können wir denselben Code in vielen Zeiten, die als Vererbung bezeichnet werden, wiederverwenden
quelle