Was sind die Unterschiede zwischen struct und class in C++?
Diese Frage wurde bereits aufgefordert, im Rahmen von C#/.Net.
Nun möchte ich lernen, die Unterschiede zwischen einem struct und einer Klasse in C++. Bitte besprechen Sie die technischen Unterschiede sowie Gründe für die Wahl der einen oder der anderen in OO-design.
Beginnen werde ich mit einem offensichtlichen Unterschied:
- Wenn Sie nicht angeben
public:
oderprivate:
Mitglieder einer struct standardmäßig public sind; Mitglieder einer Klasse sind standardmäßig privat.
Ich bin sicher, es gibt andere Unterschiede finden sich in den obskuren Ecken der C++ - Spezifikation.
link sind die Unterschiede zusammengefasst.
Warum die Leute alle verwenden struct zu bauen, einen Baum dann? Weil es scheint, dass der Unterschied ist nicht viel. BTW, ist eine große website.@sjsam
Suchen der Unterschied zwischen
Nicht "alle" Menschen tun! Diejenigen, die das tun, entweder einfach lieber, oder nicht wissen, was die
Warum die Leute alle verwenden struct zu bauen, einen Baum dann? Weil es scheint, dass der Unterschied ist nicht viel. BTW, ist eine große website.@sjsam
Suchen der Unterschied zwischen
struct
in C und C++? Siehe hier.Nicht "alle" Menschen tun! Diejenigen, die das tun, entweder einfach lieber, oder nicht wissen, was die
struct
bedeutet in C++. 😉 Aber es gibt keinen Grund, Sie nicht verwenden können, die class
keyword statt.InformationsquelleAutor palm3D | 2008-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vergessen Sie die kniffligen 2. Unterschied zwischen Klassen und Strukturen.
Sprach der Norm (§11.2.2 in C++98 durch C++11):
Und nur der Vollständigkeit halber, die weiter verbreitet ist der Unterschied zwischen class und struct ist definiert in (11.2):
Weiterer Unterschied: das Schlüsselwort
class
können verwendet werden, um zu erklären template-Parameter, während diestruct
Schlüsselwort nicht verwendet.class
öffentlichen standardmäßig mitstruct
, und beide definieren Sie eine Klasse Typ.Ich glaube, du verpasst den Punkt, Ben. Es ist das Erbe, das die öffentlichkeit für Strukturen und private für Klassen. Das ist eine sehr wichtige Unterscheidung, und völlig unabhängig von der tatsächlichen member-Zugang. Zum Beispiel die Sprache könnte sehr wohl definiert es anders, z.B. beide sind öffentlich per default vererbt, und Sie würde sich sehr unterschiedliche Auswirkungen.
Tatsächlich, die echten tricky Unterschied zwischen
struct
undclass
ist, dass letztere kann verwendet werden, anstelle einertypename
zu deklarieren einer template-parameter, während die ehemaligen nicht.:)
Dies ist völlig falsch. (Es gibt eine Schule, die diese verwendet, für eine Konvention, aber es ist nicht syntaktisch erzwungen.)
echt tricky Unterschied zwischen struct und class" -- Niedlich, aber die Frage ist über den Unterschied zwischen ein struct und einen - Klasse, die nicht über die Unterschiede in denen die Schlüsselwörter können verwendet werden.
InformationsquelleAutor Assaf Lavie
Zitieren Der C++ - FAQ,
InformationsquelleAutor Robᵩ
Es lohnt sich zu erinnern, C++'s Herkunft, und die Kompatibilität mit C.
C structs, es hat kein Konzept der Kapselung, so ist alles öffentlich.
Wird standardmäßig öffentlich ist generell eine schlechte Idee, wenn man einen Objekt-orientierten Ansatz, so dass bei der Herstellung eine form von C, die nativ förderlich zu OOP (Sie können tun OO in C, aber es wird Ihnen nicht helfen) das war die Idee in C++ (ursprünglich "C Mit Klassen"), macht es Sinn, dass Mitglieder standardmäßig privat.
Auf der anderen Seite, wenn Stroustrup geändert hatte, das die Semantik des
struct
so dass Ihre Mitglieder wurden standardmäßig privat, es würde gebrochen haben, Kompatibilität (es ist nicht mehr so oft wahr, wie die standards auseinander, aber alle gültigen C-Programme wurden auch gültige C++ - Programme, die hatten eine große Wirkung auf die Angabe C++, Fuß zu fassen).Also ein neues Schlüsselwort, "
class
wurde eingeführt um genau zu sein, wie ein struct, aber standardmäßig privat.Wenn die C++ von Grund auf, ohne Geschichte, dann wäre es vermutlich nur ein solches Schlüsselwort. Es auch wohl nicht gemacht haben die Auswirkungen.
Im Allgemeinen Menschen neigen dazu, zu verwenden, struct, wenn Sie etwas tun, wie structs sind in C verwendet; öffentlichen Mitglieder, die keinen Konstruktor (solange es nicht in eine union, Sie kann haben Konstruktoren in structs, genauso wie mit den Klassen, aber die Menschen neigen nicht dazu), keine virtuellen Methoden, etc. Da Sprachen sind, so viel mit Menschen zu kommunizieren Lesen des Codes zu beauftragen, Maschinen (sonst würden wir-stick mit Montage-und raw-VM opcodes) es ist eine gute Idee mit dem stick.
die Tatsache, dass es eine OO-Sprache, in der ein riesiges repertoire an Programmen, geschrieben in einer nicht-OO Sprache gültig waren-Programmen, brachte das Konzept in den Vordergrund, und es scheint, mehr kommt da mehr rein als in OO-Sprachen (und der Kurs ist eigentlich in der Norm definiert). Die Geschichte der frühen C++ definitiv erklärt eine Menge über Sie. Stroustrup ' s "The Design and Evolution of C++" ist eine interessante Lektüre.
Ich sehe einen religiösen Krieg zwischen den Menschen, die glauben, dass alles was nicht "oop-ish", werden sollten, und diejenigen, die glauben, dass die OOP betrachtet werden sollte, die als eine", aber nicht die - tool. C++ scheint sicher zu umarmen, der letztere Philosophie, aber ich weiß wirklich nicht viel über Sprachen, bevor es. Meine eigene Philosophie ist, dass, wenn man will, dass ein Objekt, sollte man ein Objekt verwenden, und, wenn man will, dass eine aggregation von verwandten, aber unabhängigen Variablen, sollte man Sie nutzen. C++ macht keine syntaktische Unterscheidung zwischen diesen Arten von Dingen, und .NET versucht zu verwischen diesen Unterschied, aber das kleine ich weiß, von D...
...deutet darauf hin, dass es erkennt so mehr, als C++ - oder .NET. Aggregationen von Variablen nicht genau OOPish, aber das bedeutet nicht, Sie sollten nicht eingesetzt werden, wenn Sie nützlich.
Ich Stimme nicht mit "C structs, es hat kein Konzept der Kapselung, also alles, was öffentlich ist.", Sie verstecken kann eine definition eines
struct
innerhalb einer*.c
-Datei und lassen Sie andere übersetzungen nur Einheiten verwenden Sie es mit einem Zeiger. So haben Sie eine noch stärkere Kapselung, da die anderen übersetzungen Einheiten, die gar nicht wissen, was im inneren derstruct
.InformationsquelleAutor Jon Hanna
Klasse " - Mitglieder sind standardmäßig privat. Struct - member standardmäßig public sind. Davon abgesehen, dass es keine anderen Unterschiede. Siehe auch diese Frage.
Naja, ich würde sagen, dass der andere Unterschied ist die Semantik. Struct zu viele Menschen, die macht Sie denken, "Daten-Struktur" als ein überbleibsel aus C.
Die sind nicht die "Semantik"; es sind persönliche Gefühle. Beide
struct
undclass
deklarieren Sie eine Klasse mit identischer Semantik (ungeachtet parse-Weise Auslegung der definition Körper).InformationsquelleAutor Kasprzol
Laut Stroustrup in den Programmiersprache C++ :
Funktional, es gibt keinen anderen Unterschied, als den öffentlichen /privaten
InformationsquelleAutor crashmstr
STRUCT ist eine Art von Abstrakter Daten-Typ, der teilt eine gegebene chunk-Speicher nach dem Struktur-Spezifikation. Strukturen sind besonders nützlich, in die Datei Serialisierung/Deserialisierung, wie die Struktur kann oft in die Datei geschrieben werden verbatim. (d.h. Sie Erhalten einen Zeiger auf die struct, verwenden Sie die GRÖßE-makro zu berechnen, die Anzahl von bytes zu kopieren, dann verschieben Sie die Daten in oder aus dem struct.)
Klassen sind eine andere Art von abstrakter Datentyp, der Versuch,, um sicherzustellen, Informationen zu verstecken. Intern kann es eine Vielzahl von Machenschaften, Methoden, temp Variablen, Status Variablen. etc. das sind alle die benutzt wird, um eine einheitliche API zu jedem code möchte, um die Klasse zu verwenden.
In Kraft, die Strukturen werden über die Daten -, Klassen sind über code.
Allerdings müssen Sie verstehen, dass dies nur Abstraktionen sind. Es ist durchaus möglich, schaffen Strukturen, die Aussehen wie eine Menge, Klassen und Klassen, die sehen aus wie structs. In der Tat, die frühesten C++ - Compiler wurden lediglich pre-Compiler übersetzt C++ - code in C. Damit diese Abstraktionen sind von Vorteil logisches denken, nicht unbedingt eine Bereicherung für den computer selbst.
Jenseits der Tatsache, dass jeder eine andere Art von Abstraktion, Klassen Lösungen zu den C-code Benennung puzzle. Da kann man nicht mehr als eine Funktion ausgesetzt mit dem gleichen Namen, von den Entwicklern verwendet, um ein Muster vorgibt, das _(). z.B. mathlibextreme_max(). Durch die Gruppierung von APIs in Klassen, die ähnliche Funktionen (hier nennen wir Sie auch "Methoden") können gruppiert werden, und geschützt von der Benennung von Methoden in anderen Klassen. Dies ermöglicht dem Programmierer, seinen code zu organisieren, besser zu erhöhen und die Wiederverwendung von code. In der Theorie zumindest.
Es ist nicht möglich, erstellen Sie ein struct in C++. Es ist nur möglich, erstellen Sie eine Klasse mit dem geerbten
struct
Schlüsselwort.Diese Antwort scheint es nicht zu sein, über C++. In C++
struct
erklärt Klassen (einschließlichpublic
/private
/protected
, Vererbung, etc).Wie sind Strukturen Abstrakt? Raw Strukturen in eine Datei ist mit Problemen behaftet, sogar in C (die üblichen Probleme, die padding, endianness, anderes Wort Größe, etc). Was ist das
SIZE
makro sprechen Sie?InformationsquelleAutor 64BitBob
1) die Mitglieder einer Klasse sind standardmäßig privat, und die Mitglieder der struct standardmäßig public sind.
Z.B. Programm 1 kann nicht in der Zusammenstellung und Programm 2 funktioniert einwandfrei.
2) Beim ableiten einer struct eine class/struct default-access-specifier für eine base class/struct ist public. Und beim ableiten von einer Klasse, Standard-zugriffsspezifizierer private.
Beispielsweise Programm 3 schlägt in der Zusammenstellung und Programm 4, funktioniert einwandfrei.
InformationsquelleAutor Suraj K Thomas
Der einzige andere Unterschied ist die default-Vererbung von Klassen und Strukturen, die, überraschend, privat und öffentlich bzw..
InformationsquelleAutor Skizz
Nicht in der Spezifikation, keine. Der Hauptunterschied liegt in Programmierer Erwartungen, wenn Sie Lesen den code in 2 Jahren. Strukturen werden oft als POD. Strukturen werden auch verwendet in template metaprogramming, wenn man einen Typ definiert, der für andere Zwecke als Objekte definieren.
InformationsquelleAutor MSalters
Eine andere Sache zu beachten, wenn Sie aktualisiert eine bestehende app, die hatte structs zu verwenden Klassen, die Sie vielleicht in der folgenden Ausgabe:
Alten code hat Strukturen, code wurde bereinigt und verändert diese Klassen.
Eine virtuelle Funktion oder zwei, wurde dann Hinzugefügt, um die neue Klasse.
Wenn die virtuellen Funktionen werden in den Klassen dann intern der compiler zusätzlichen Zeiger auf die Klasse, die Daten und verweisen auf die Funktionen.
Wie diese würde brechen alte legacy-code ist, wenn in den alten code irgendwo die Struktur wurde gelöscht memfill, um es zu deaktivieren alle zu Nullen, dies würde stomp der zusätzliche Zeiger Daten sowie.
Verwendung der null-füllen, zu löschen oder initialisieren einer Struktur der Daten ist standard in C. in einer mixed-language-Projekt, kann man nicht erwarten, dass der code in C zu vermeiden
calloc
zu Gunsten vonnew
. Alles was man tun kann, ist zu versuchen, um sicherzustellen, dass alle Strukturen verwendet, die von der C-Teil des Codes sind in der Tat HÜLSEN.InformationsquelleAutor KPexEA
Dies ist auf VS2005.
_tmain
ist kein standard C++.InformationsquelleAutor
Ein weiterer wichtiger Unterschied ist, wenn es um Vorlagen. Soweit ich weiß, können Sie eine Klasse verwenden, wenn Sie eine Vorlage definieren, aber NICHT eine Struktur.
struct
ist nicht zulässig, da Sie nur durch Konvention (besser zu sagen, es istclass
Schlüsselwort verwendet wird, im anderen Sinn, hier ist, siehe 'class' oder 'typename' zum template-Parameter).Das Schlüsselwort nicht erlaubt ist es, aber Sie können gehen in eine Klasse, die Sie definiert mit
struct
gut. Probieren Sie es einfach.struct T{}; template <typename T> void foo() {} foo<T>();
InformationsquelleAutor Stefan Popescu
Hier ist eine gute Erklärung: http://carcino.gen.nz/tech/cpp/struct_vs_class.php
InformationsquelleAutor nutario
Es ist nur eine Konvention. Strukturen geschaffen werden können, halten Sie einfach die Daten aber später entwickeln sich Zeit mit der Zugabe von member-Funktionen und Konstruktoren. Auf der anderen Seite ist es ungewöhnlich, um zu sehen, alles andere als öffentlich: Zugang in ein struct.
InformationsquelleAutor finnw
InformationsquelleAutor Gregory Pakosz
Mitglied einer Klasse definiert, mit dem Schlüsselwort
class
sindprivate
standardmäßig. Die Mitglieder einer Klasse definiert mit den keywordsstruct
(oderunion
)public
standardmäßig.In Ermangelung einer access-specifier für eine Basis-Klasse
public
ausgegangen, wenn die abgeleitet Klasse deklariert iststruct
undprivate
ausgegangen, wenn die Klasse deklariert istclass
.Können Sie erklären, ein
enum class
aber nicht einenum struct
.Können Sie
template<class T>
aber nichttemplate<struct T>
.Beachten Sie auch, dass die C++ - standard erlaubt es Ihnen, vorwärts-deklarieren Sie einen Typ als
struct
, und verwenden Sie dannclass
bei der Deklaration der Typ, und Umgekehrt. Auchstd::is_class<Y>::value
isttrue
für Y einstruct
und einclass
, aber istfalse
für eineenum class
.InformationsquelleAutor Bathsheba
Den anderen Antworten erwähnt haben die private - /public-defaults, (aber beachten Sie, dass eine struct ist eine Klasse ist eine Struktur; Sie sind nicht zwei verschiedene Elemente, die nur zwei Möglichkeiten der Definition das gleiche Element).
Was interessant sein könnte, zu beachten (besonders, da der Fragesteller ist wahrscheinlich mit MSVC++, da er erwähnt "unmanaged" C++), Visual C++ beschwert sich unter bestimmten Umständen, wenn eine Klasse wird deklariert mit
class
und dann definiert mitstruct
(oder möglicherweise Umgekehrt), obwohl der standard sagt, dass ist vollkommen legal.InformationsquelleAutor ymett
. In Klassen, die alle Mitglieder standardmäßig sind privat, aber in der Struktur
Mitglieder sind standardmäßig öffentlich.
Gibt es keinen Begriff, wie Konstruktor-und Destruktor für Strukturen, sondern für die Klasse compiler erstellt Verzug, wenn Sie nicht stellen.
Sizeof leere Struktur ist 0 Bytes, wer als Sizeof leere Klasse ist 1 Byte struct default-access-Typ public ist. Eine Struktur sollte
in der Regel verwendet werden, für die Gruppierung von Daten.
Die Klasse default access type ist privat, und der Standard-Modus für
Vererbung ist privat. Eine Klasse sollte verwendet werden, für die Gruppierung von Daten und
Methoden, die auf die Daten.
Kurzum, die Konvention ist die Verwendung von struct, wenn der Zweck ist, zu
Gruppe von Daten, und verwenden Sie Klassen, wenn wir Daten benötigen Abstraktion und
vielleicht Vererbung.
In C++ Strukturen und Klassen als Wert übergeben werden, sofern nicht ausdrücklich
de-referenziert wird. In anderen Sprachen, Klassen und Strukturen haben kann
verschiedene Semantik - ie. Objekte (Instanzen von Klassen) weitergegeben werden dürfen
durch Referenz und Strukturen können durch Wert übergeben werden. Hinweis: Es gibt
Kommentare im Zusammenhang mit dieser Frage. Siehe die Diskussions-Seite an
fügen Sie das Gespräch.
g++
. Sie werden vielleicht denken Empty Base Optimization, aber das trifft auf beide zu.Nicht wahr. In C++ die Größe einer leeren struct ist 1. In C ist eine leere Struktur ist nicht erlaubt. GCC erlaubt leere Strukturen in C als compiler-Erweiterung und eine solche Struktur hat die Größe 0.
Diese Antwort ist falsch. Zusätzlich zu der Größe der Sache, die Konstruktor/Destruktor-Teil ist auch ungenau: Strukturen können Konstruktoren und Destruktoren einfach nur gut. In der Tat
struct
schafft vollwertige Klassen in C++.InformationsquelleAutor yshivakathik
Während konkludent durch die anderen Antworten, es ist nicht explizit erwähnt - die Strukturen sind C-kompatibel, je nach Verwendungszweck, sind die Klassen nicht.
Dies bedeutet, wenn Sie schreiben eine Kopfzeile, die Sie wollen, zu C kompatibel ist, dann haben Sie keine andere Wahl, als struct (die in der C-Welt kann nicht Funktionen, sondern können sich auch Funktionszeiger).
InformationsquelleAutor UKMonkey
Klasse ist nur sinnvoll im Kontext von software-engineering. Im Kontext von Datenstrukturen und algorithmen, class und struct sind nicht anders. Es gibt keine Regel eingeschränkt, dass die Klasse Mitglied müssen referenziert werden.
Bei der Entwicklung großes Projekt mit Tonnen von Menschen ohne Klasse, Sie kann endlich komplizierten gekoppelten code, weil jeder verwenden, was Funktionen und Daten, die Sie wollen. Klasse stellt die Berechtigung kontrolliert und birgt zur Verbesserung der Entkopplung und Wiederverwendung von codes.
Wenn Sie Lesen, werden einige software-engineering-Prinzipien, werden Sie feststellen, dass die meisten standards können nicht einfach umgesetzt werden, ohne Klasse. zum Beispiel:
http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29
BTW, Wenn ein struct reserviert einen crunch-Speicher und beinhaltet mehrere Variablen, die value-type-Variablen zeigt, dass die Werte korrekt eingebundenen, in denen eine Struktur zugeordnet ist. Im Gegensatz dazu, den Typ der Referenz-Variablen die Werte von externen und Referenz ein Zeiger, das ist auch eingebettet in wo struct zugeordnet ist.
struct
erklärt Klassen (einschließlich der Berechtigung, Kontrollen, Vererbung, etc).InformationsquelleAutor snow
Möglicherweise betrachten Sie diese Richtlinien, wenn Sie gehen für Struktur oder Klasse, https://msdn.microsoft.com/en-us/library/ms229017%28v=vs.110%29.aspx .
InformationsquelleAutor kiriloff
Den Unterschied zwischen struct und Klasse Schlüsselwörter in C++ ist, dass, wenn es keine spezifischen Bezeichner auf bestimmten zusammengesetzten Datentyp dann standardmäßig struct oder union ist die öffentlich-keywords, die nur Daten berücksichtigt, die versteckt, aber Klasse ist das Schlüsselwort private Auffassung, dass das ausblenden von Programmcode oder Daten. Immer einige Programmierer verwenden struct für Daten und Klasse für code Willen. Für weitere Informationen wenden Sie sich an andere Quellen.
struct
member standardmäßig public sind, und die akzeptierte Antwort von 2009 erwähnt Vererbung. Warum schreiben andere Antwort, fügt keine neuen Informationen, 4 Jahre später?InformationsquelleAutor MOBITI MAHENGE
Sich aus all diesen Faktoren kann geschlossen werden, dass das Konzept Klasse ist sehr geeignet, um stellen real-Welt-Objekte anstelle von "Strukturen".Vor allem, weil OOP-Konzepte in der Klasse sind sehr praktisch bei der Erklärung der realen Welt Szenarien, daher leichter zu verbinden Sie zur Realität.Ein Beispiel für die standardmäßige Vererbung der öffentlichkeit für Strukturen, aber wenn wir diese Regel anwenden, für die Reale Welt,es ist lächerlich.Aber in einer Klasse default-Vererbung ist privat, das ist realistischer.
Sowieso,was ich brauche, um zu rechtfertigen, ist Klasse ist eine viel breitere realen Welt geltenden Begriff in der Erwägung, dass die Struktur ist in einer primitiven Vorstellung mit schlechter interner Organisation(Eventhough struct folgt OOP-Konzepte,die Sie haben eine schlechte Bedeutung)
InformationsquelleAutor Wageesha
Der wesentliche Unterschied zwischen Struktur-und class-Schlüsselwort in oops ist, dass keine öffentlichen und privaten member-Deklaration vorhanden in der Struktur.und die Daten-member und member-Funktion definiert werden kann, wie öffentliche, private als auch geschützt.
struct
erklärt Klassen (einschließlichpublic
/private
/protected
, Vererbung, etc).InformationsquelleAutor Tushar Bobade
Den wichtigsten Unterschied zwischen struct und class ist, dass in struct Sie können nur erklären, Daten, Variablen unterschiedlicher Datentypen, während in der Klasse, die Sie deklarieren können, Daten, Variablen,member-Funktionen und so können Sie Daten manipulieren Variablen durch Funktionen.
-> eine andere praktische Sache, die ich finden-in-class vs. struct ist, dass bei der Umsetzung Dateien in einem Programm, wenn Sie wollen, um einige Operationen einer struct immer wieder auf jeden neuen Satz von Operationen, die Sie brauchen, um eine separate Funktion, und du musst ein Objekt der Struktur nach dem Lesen aus der Datei, so dass einige Vorgänge auf .
während in der Klasse, wenn Sie eine Funktion, die einige Operationen auf den Daten, die man benötigt jedes mal..es ist einfach man muss nur Lesen, Objekt, aus Datei, und rufen Sie die Funktion..
Aber es depennds am Programmierer, welchen Weg er/Sie findet passende...nach mir, ich bevorzuge Klasse immer nur, weil es unterstützt OOPs und das ist der Grund, warum es nicht umgesetzt wird in fast allen Sprachen und die wunderbare Eigenschaft, alle Zeit der Programmierung 😉
Yeah und die meisten unvergessen Unterschied, den ich vergessen habe zu erwähnen ist, dass die Klasse unterstützt Daten versteckt und unterstützt auch Vorgänge, die auf eingebaute Datentypen, während struct nicht !
struct
können member-FunktionenDanke... habe ich wissen über dieses feature gerade jetzt.. vielen Dank.. ich bin nur ein beginer nicht als Experten, wie Sie so in Zukunft müssen auch die Ratschläge von u Jungs 🙂
und tatsächlich, die member-Funktion ist bestimmt in seiner breiteren Bedeutung.
struct
haben kann, Konstruktoren, member-Funktion und distructor (ggf. virtuellen, möglicherweise private, protected oder public). Sie können Erben und vererbt werden. also eigentlich... alles eine Klasse haben kann. eine typische Konvention ist zu erklären mit struct, was Sie erklärt haben, als struct in C, und als Klasse, wenn wir erklären, private und protected Variablen, virtuelle Funktionen, ctor und dtor, und so weiter. Aber es ist nur eine Konvention, nicht erzwungen durch die SpracheInformationsquelleAutor Yug Rawal
Fand ich einen anderen Unterschied. wenn Sie nicht definieren Sie einen Konstruktor in der Klasse, der compiler definieren. aber in ein struct, wenn Sie nicht definieren Sie einen Konstruktor, den der compiler nicht, definieren Sie einen Konstruktor zu. so in einigen Fällen, die wir wirklich nicht brauchen einen Konstruktor struct ist eine bessere Wahl (performance-Tipp).
und sorry für mein schlechtes Englisch.
struct
Schlüsselwort und einer Klasse definiert, mit derclass
Stichwort in diesem Zusammenhang.wenn ich eine Struktur, mit der aus einem Konstruktor, bekomme ich eine bessere Geschwindigkeit als eine Klasse mit einem Konstruktor.
Nach ein paar Messungen.
Nein, Sie nicht.
InformationsquelleAutor Ali
Klassen sind Referenztypen und-Strukturen-Werte-Typen.
Wenn ich sage, Klassen sind Referenztypen,
im Grunde enthalten Sie die Adresse einer Instanz-Variablen.
Beispiel:
In der main-Methode,
Kann ich erstellen Sie eine Instanz dieser Klasse mittels new-operator, reserviert Speicher für diese Klasse
und speichert die Basis-Adresse, in die variable vom Typ MyClass(_myClassObject2).
In das obige Programm,
MyClass _myClassObject2 = _myClassObject1;
Anweisung zeigt an, dass beide Variablen vom Typ "MyClass"
und wird an der gleichen Speicherstelle.
Im Grunde weist die gleiche Speicherposition in eine andere variable des gleichen Typs.
Also, wenn alle änderungen, die wir machen, in jede eines der Objekte Typ "MyClass" wird eine Wirkung auf eine andere
da beide zeigen auf den gleichen Speicherbereich.
"_myClassObject1.DataMember = 10;" in dieser Zeile, das Objekt die Daten der Mitglieder enthält den Wert 10.
"_myClassObject2.DataMember = 20;" in dieser Zeile sowohl die Daten des Objekts Mitglied enthält den Wert 20.
Schließlich, wir sind auf datamembers eines Objekts über Zeiger.
Im Gegensatz zu Klassen, Strukturen sind Werttypen.
Zum Beispiel:
In das obige Programm,
Instanziierung des Objekts von MyStructure Typ mit new-operator und
Speicherung der Adresse in _myStructObject variable vom Typ MyStructure und
die Zuweisung mit dem Wert 10, die Daten-member der Struktur mit "_myStructObject1.DataMember = 10".
In der nächsten Zeile
Ich bin deklarieren eine andere variable _myStructObject2 der Typ MyStructure und zuordnen _myStructObject1.
Hier .NET C# - compiler erstellt eine weitere Kopie von _myStructureObject1 Objekt und
weist der Speicherbereich in MyStructure variable _myStructObject2.
Also was ändern, machen wir uns auf _myStructObject1 haben nie eine Wirkung auf eine andere variable _myStructObject2 der Typ MyStructrue.
Das ist, warum wir sagen: Strukturen sind Werttypen.
Damit die sofortige Base-Klasse für Klasse ist das Objekt und der unmittelbaren Basisklasse für die Struktur ValueType, die erbt von Object.
Klassen unterstützen eine Vererbung in der Erwägung, dass Strukturen nicht.
Wie sollen wir das sagen?
Und was ist der Grund dahinter?
Die Antwort ist Klassen.
Kann es sein abstract, sealed, static, und teilweise und können nicht Private, Protected und protected internal.
absolut, das er geschrieben hat, seinen Beispiel-code in C# und ich kam hier, um zu überprüfen, dass es nicht ein Unterschied in der Parameterübergabe zwischen C++
struct
undclass
. Niemand hat hier erwähnt, nicht das gesamte web. Also ich glaube nicht, das gilt für C++.Das ist nicht einmal Gültiger C# - code - die keywords sind alle falsch. "Public", "Static", "Int", und "Klasse" sollte nicht aktiviert werden und es sollte "struct" nicht "Struktur". Beschreibung ist meist richtig für C# (aber Strukturen können noch Erben Schnittstellen, nur nicht andere Strukturen), aber nicht die Frage beantworten, da war es über C++...
Diese Antwort ist kompletter Unsinn. Es verwendet eine seltsame Mischung aus Visual Basic und C# für seine code-Beispiele, und das ganze "Klassen sind Referenztypen und-Strukturen-Werte-Typen"... Sache gilt nur für .NET (z.B. C#) nicht zu C++. Du bist im falschen Zimmer, dude. Dies ist, wo Sie hingehören : stackoverflow.com/questions/13049
Aber Antwort zeigt an, das gleiche gilt für C(++), dass Strukturen verwendet werden, wie Wert-Typen.
int a = 3; int b = a;
und ähnlicheMyStruct a=MyStruct("data"); MyStruct b = a;
InformationsquelleAutor Abhishek Sharma
** * UPDATE: ** ignorieren Sie Bitte diese Antwort. Ich habe nicht die Möglichkeit in Betracht ziehen, dass für die Struktur, der Wert wurde nicht initialisiert, sondern nur zufällig 0 ist. Es ist keine Initialisierung der Unterschied zwischen struct und class.
Ich bin sehen anderen anders zwischen structs und Klassen müssen mit der default-Initialisierung.
Führen, dass code und untersuchen myTester. Sie werden feststellen, dass für m_Foo, die Struktur, m_Foo.eine Initialisierung auf 0, aber für m_Bar, Klasse, m_Bar.ein nicht initialisiert ist. Also es scheint tatsächlich ein Unterschied in dem, was der default-Konstruktor muss für struct vs. class. Ich sehe das mit Visual Studio.
m_Foo.a
initialisiert wurde? Was, wenn es nicht initialisiert und nur zufällig0
?Ähhh, habe ich nicht. Mein schlechtes. Dies ist nicht ein Unterschied zwischen struct und class. Initialisierung Merkmale sind die gleichen.
InformationsquelleAutor Eric Hill
Gibt es 3 grundlegende Unterschied zwischen Struktur und Klasse
1. - Speicher reserviert für die Struktur in der stack-Speicher (bei Programmiersprache ), ob für die Klasse im stack-Speicher werden reserviert nur für reffrence und tatsächliche Speicher reserviert im heap-Speicher.
2. - By-default-Struktur behandeln als eine öffentlichkeit, ob Klasse behandeln als eine private .
3. - kann nicht re -verwenden Sie den code in der Struktur, jedoch in der Klasse können wir re-verwenden Sie den gleichen code in viele Zeit genannt inhertence
#1 ist auch falsch. Der stack wird verwendet, wenn Sie erklären, etwas in der Art wie eine lokale variable, und der heap wird verwendet, wenn Sie die "neuen" Betreiber.
InformationsquelleAutor Naveen