Ich habe meine Hausaufgaben gemacht und hatte verschiedene Antworten auf Google.
Einige sagen, dass Strukturen keine Vererbung haben, manche sagen, dass Strukturen keine Zugriffsspezifizierer haben, während andere sagen, dass sie beide haben.
Könnte jemand dann klarstellen, die Unterschiede zwischen einer Struktur und einer Klasse in C und C ++, und auch der Unterschied zwischen einer Struktur in C & amp; C ++.
In C ++ besteht der einzige Unterschied zwischen einer Struktur und einer Klasse darin, dass die Strukturelemente standardmäßig öffentlich sind und die Klassenmitglieder standardmäßig privat sind.
Allerdings ist es am besten, das Schlüsselwort struct
für etwas zu verwenden, das vernünftigerweise eine Struktur in C sein könnte (mehr oder weniger POD-Typen), und das class
Schlüsselwort, wenn es C ++ - spezifische Funktionen wie Vererbung und Elementfunktionen verwendet.
C hat keine Klassen.
C-Strukturen können keine C ++ - spezifischen Funktionen verwenden.
BEARBEITEN :
Die C ++ FAQ Lite , Frage 7.9, sagt Folgendes:
Die Mitglieder und Basisklassen eines
struct
sind standardmäßigpublic
, inclass
sind sie standardmäßig aufprivate
eingestellt. Hinweis: Sie sollten machen Ihre Basisklassen explizitpublic
,private
oderprotected
, anstatt sich auf die Standardeinstellungen zu verlassen.
struct
undclass
sind ansonsten funktionell äquivalent.OK, genug von diesem quietschenden, sauberen Techno-Talk. Emotional, am meisten Entwickler unterscheiden stark zwischen einem
class
und einemstruct
. Astruct
einfach fühlt sich wie ein offener Haufen von Bits mit sehr wenig an in der Art der Kapselung oder Funktionalität. Aclass
fühlt sich wie ein lebendiges und verantwortungsbewusstes Mitglied der Gesellschaft mit intelligenten Diensten, a starke Einkapselungsbarriere und eine gut definierte Schnittstelle. Schon seit Das ist die Konnotation, die die meisten Leute schon haben, sollte man wahrscheinlich Verwenden Sie das Schlüsselwortstruct
, wenn Sie eine Klasse mit sehr wenigen Methoden haben und hatpublic
Daten (solche Dinge tun existieren in gut gestaltet Systeme!), aber ansonsten sollten Sie wahrscheinlich das Schlüsselwortclass
verwenden.
Und Zitat von Stroustrups "Die C ++ Programmiersprache", 4. Ausgabe, Abschnitt 16.2.4:
Diese beiden Definitionen von S sind austauschbar, obwohl es dies ist normalerweise weise, um zu einem Stil zu bleiben. Welchen Stil Sie verwenden, hängt davon ab Umstände und Geschmack. Ich neige dazu, struct für Klassen zu verwenden, die ich denke an "nur einfache Datenstrukturen". Wenn ich an eine Klasse als "a richtiger Typ mit einer Invariante: "Ich benutze class . Konstruktoren und Zugriffsfunktionen können sogar für * struct * s sehr nützlich sein, aber als a Stenographien statt Garanten von Invarianten.
In C gibt es keine Klassen. In C ++ haben Strukturen einen Standardzugriffsspezifizierer von public
, während Klassen standardmäßig auf private
gesetzt sind.
Es gibt einige Unterschiede zwischen Strukturen in C und C ++; in C ++ können sie von anderen Klassen oder Strukturen erben, sie können Elementfunktionen enthalten und ihre Namen müssen nicht mit einem ausgearbeiteten Typspezifizierer bezeichnet werden.