Nach Abschluss meiner C ++ - Klasse schien es mir, dass die Strukturen / Klassen bis auf ein paar kleine Unterschiede praktisch identisch sind.
Ich habe noch nie in C programmiert. aber ich weiß, dass es Strukturen hat. Ist es in C möglich, andere Strukturen zu erben und einen Modifikator für öffentlich / privat festzulegen?
Wenn Sie dies in regulärem C tun können, warum in aller Welt brauchen wir C ++? Was unterscheidet Klassen von einer Struktur?
Antworten:
In C ++ sind Strukturen und Klassen ziemlich gleich. Der einzige Unterschied besteht darin, dass Zugriffsmodifikatoren (für Mitgliedsvariablen, Methoden und Basisklassen) in Klassen standardmäßig privat und Zugriffsmodifikatoren in Strukturen standardmäßig öffentlich sind.
In C ist eine Struktur jedoch nur eine aggregierte Sammlung von (öffentlichen) Daten und weist keine anderen klassenähnlichen Merkmale auf: keine Methoden, kein Konstruktor, keine Basisklassen usw. Obwohl C ++ das Schlüsselwort geerbt hat, wurde die Semantik erweitert. (Dies ist jedoch der Grund, warum Dinge in Strukturen standardmäßig öffentlich sind - eine Struktur, die wie eine C-Struktur geschrieben wurde, verhält sich wie eine.)
Während es möglich ist, eine OOP in C zu fälschen - zum Beispiel Funktionen zu definieren, die alle einen Zeiger auf eine Struktur als ersten Parameter verwenden, oder gelegentlich Strukturen mit denselben ersten Feldern zu "Unter- / Oberklassen" zu zwingen -, ist dies immer eine Art angeschraubt und ist nicht wirklich Teil der Sprache.
quelle
Abgesehen von den Unterschieden beim Standardzugriff (öffentlich / privat) gibt es keinen Unterschied.
Einige Shops, die in C und C ++ codieren, verwenden jedoch "class / struct", um anzugeben, welche in C und C ++ (struct) verwendet werden können und welche nur C ++ (class) sind. Mit anderen Worten, in diesem Stil müssen alle Strukturen mit C und C ++ funktionieren. Aus diesem Grund gab es vor langer Zeit einen Unterschied, als C ++ noch als "C mit Klassen" bekannt war.
Beachten Sie, dass C-Gewerkschaften mit C ++ arbeiten, aber nicht umgekehrt. Beispielsweise
Und ebenfalls
funktioniert nur in C.
quelle
Ich werde die vorhandenen Antworten ergänzen, da modernes C ++ jetzt eine Sache ist und offizielle Kernrichtlinien erstellt wurden, um bei Fragen wie diesen zu helfen.
Hier ist ein relevanter Abschnitt aus den Richtlinien:
Die angegebenen Codebeispiele:
Class
Es funktioniert gut für Mitglieder, die beispielsweise voneinander abgeleitet oder miteinander verbunden sind. Sie können auch bei der Überprüfung der geistigen Gesundheit nach der Instanziierung helfen.Struct
s eignen sich gut für "Datenbeutel", in denen nichts Besonderes vor sich geht, aber die Mitglieder logischerweise Sinn machen, wenn sie in Gruppen zusammengefasst werden.Aus diesem Grund ist es sinnvoll, dass
class
es zur Unterstützung der Kapselung und anderer verwandter Codierungskonzepte existiert, für diestruct
s einfach nicht sehr nützlich sind.quelle
struct
s sind am tragbarsten. Sie können von C oder C ++ oder hin und her verwendet werden. Sie können beispielsweise auch mit demstruct
Modul in Python entpackt werden . Wenn Ihr Projekt die Kompatibilität mit anderen Sprachen, Schnittstellen oder Systemen priorisiert, ziehenstruct
Sie es vorclass
. Für streng programminterne Angelegenheiten bevorzugenclass
.In C ist es nicht möglich, Elementfunktionen zu definieren oder Strukturen voneinander abzuleiten.
Außerdem ist C ++ nicht nur C + "Strukturen ableiten". Vorlagen, Referenzen, benutzerdefinierte Namespaces und Operatorüberladungen sind in C nicht vorhanden.
quelle
power
Strukturen in C nicht bekannt . Dann verwendet C ++ nur Strukturen, um mit C abwärtskompatibel zu sein?struct
dran , aber die Unterscheidung kann ein Signal der Absicht sein: Wenn ich ein benutze, meine ich ein weitgehend passives POD-Ding.std::less
) als Strukturen definiert, nicht als Klassen.Ein weiterer Unterschied in C ++: Wenn Sie eine Klasse von einer Struktur ohne Zugriffsspezifizierer erben, wird sie zur öffentlichen Vererbung, während es sich wie bei einer Klasse um eine private Vererbung handelt.
quelle
C ++ verwendet Strukturen hauptsächlich für 1) Abwärtskompatibilität mit C und 2) POD-Typen. C-Strukturen haben keine Methoden, Vererbung oder Sichtbarkeit.
quelle
std::less
) als Strukturen definiert, nicht als Klassen.