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.

-5voto

Tushar Bobade Punkte 1

Der Hauptunterschied zwischen Struktur und Klasse Schlüsselwort in oops ist, dass keine öffentlichen und privaten Mitglied Deklaration in structure.and die Daten Mitglied und Mitglied Funktion kann als öffentlich, privat als auch geschützt definiert werden.

-5voto

Yug Rawal Punkte 1

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 Mitgliedsfunktionen deklarieren können und somit Datenvariablen durch Funktionen manipulieren können.

-> eine weitere praktische Sache, die ich in der Klasse vs struct finden ist, dass während der Implementierung von Dateien in einem Programm, wenn Sie einige Operationen einer Struktur immer wieder auf jede neue Reihe von Operationen machen wollen, müssen Sie eine separate Funktion zu machen und Sie müssen Objekt von struct nach dem Lesen es aus der Datei übergeben, um einige Operationen auf sie zu machen. Während in der Klasse, wenn Sie eine Funktion, die einige Operationen auf die Daten jedes Mal benötigt macht..seine einfach Sie müssen nur Objekt aus der Datei lesen und rufen Sie die Funktion.

Aber es hängt vom Programmierer ab, welchen Weg er/sie für geeignet hält...meiner Meinung nach bevorzuge ich immer Klassen, einfach weil sie OOPs unterstützen und das ist der Grund, warum sie in fast allen Sprachen implementiert sind und es ist das wunderbare Feature aller Zeiten der Programmierung ;-)

Und ja die meisten unvergessenen Unterschied, den ich vergessen habe zu erwähnen ist, dass Klasse unterstützt Daten verstecken und unterstützt auch Operationen, die auf eingebaute Datentypen durchgeführt werden, während Struktur doesnt!

-6voto

Ali Punkte 7

Ich fand einen anderen Unterschied. wenn Sie nicht einen Konstruktor in einer Klasse definieren, wird der Compiler einen definieren. aber in einem struct, wenn Sie nicht definieren einen Konstruktor, der Compiler nicht definieren einen Konstruktor zu. so in einigen Fällen, die wir wirklich nicht brauchen einen Konstruktor, struct ist eine bessere Wahl (Leistung Tipp). und sorry für mein schlechtes Englisch.

-9voto

Abhishek Sharma Punkte 279

Klassen sind Referenztypen und Strukturen sind Wertetypen.
Wenn ich sage, dass Klassen Referenztypen sind,
Grundsätzlich enthalten sie die Adresse einer Instanzvariablen.

Zum Beispiel:

Class MyClass
{
    Public Int DataMember;  //By default, accessibility of class data members 
                            //will be private. So I am making it as Public which 
                            //can be accessed outside of the class.
}

In der Hauptmethode,
Ich kann eine Instanz dieser Klasse erstellen, indem ich den Operator new verwende, der Speicher für diese Klasse zuweist
und speichert die Basisadresse davon in der Variablen vom Typ MyClass (_myClassObject2).

Static Public void Main (string[] arg)
{
    MyClass _myClassObject1 = new MyClass();
    _myClassObject1.DataMember = 10;

    MyClass _myClassObject2 = _myClassObject1;
    _myClassObject2.DataMember=20;
}

Im obigen Programm, MyClass _myClassObject2 = _myClassObject1; Anweisung zeigt an, dass beide Variablen vom Typ MyClass

  1. myClassObject1
  2. myClassObject2

und verweist auf denselben Speicherplatz.
Sie weist im Grunde denselben Speicherplatz einer anderen Variablen desselben Typs zu.

Wenn wir also Änderungen an einem der Objekte vom Typ MyClass vornehmen, wirkt sich das auf ein anderes Objekt aus.
da beide auf denselben Speicherplatz verweisen.

"_myClassObject1.DataMember = 10;" in dieser Zeile werden die beiden Datenelemente des Objekts den Wert 10 enthalten.
"_myClassObject2.DataMember = 20;" in dieser Zeile werden beide Datenelemente des Objekts den Wert 20 enthalten.
Irgendwann, wir greifen über Zeiger auf Datenelemente eines Objekts zu.

Im Gegensatz zu Klassen sind Strukturen Werttypen. Zum Beispiel:

Structure MyStructure
{
    Public Int DataMember;  //By default, accessibility of Structure data 
                            //members will be private. So I am making it as 
                            //Public which can be accessed out side of the structure.
}

Static Public void Main (string[] arg)
{
    MyStructure _myStructObject1 = new MyStructure();
    _myStructObject1.DataMember = 10;

    MyStructure _myStructObject2 = _myStructObject1;
    _myStructObject2.DataMember = 20;
}

Im obigen Programm,
Instanziierung des Objekts vom Typ MyStructure mit dem Operator new und
Speichern der Adresse in der Variablen _myStructObject vom Typ MyStructure und
Zuweisung des Wertes 10 zum Datenelement der Struktur mit "_myStructObject1.DataMember = 10".

In der nächsten Zeile,
Ich deklariere eine weitere Variable _myStructObject2 vom Typ MyStructure und weise _myStructObject1 dieser Variable zu.
Hier erstellt der .NET-C#-Compiler eine weitere Kopie des Objekts _myStructureObject1 und
weist diese Speicherstelle der MyStructure-Variablen _myStructObject2 zu.

Jede Änderung, die wir an _myStructObject1 vornehmen, wird sich also niemals auf eine andere Variable _myStructObject2 vom Typ MyStructrue auswirken.
Deshalb sagen wir, dass Strukturen Werttypen sind.

Die unmittelbare Basisklasse für Klasse ist also Object und die unmittelbare Basisklasse für Struktur ist ValueType, die von Object erbt.
Klassen unterstützen eine Vererbung, während Strukturen dies nicht tun.

Wie können wir das sagen?
Und was ist der Grund dafür?
Die Antwort lautet "Klassen".

Es kann abstrakt, versiegelt, statisch und partiell sein, aber nicht privat, geschützt und intern geschützt.

-10voto

Naveen Punkte 1

Es gibt 3 grundlegende Unterschiede zwischen Struktur und Klasse

1St- Speicher sind für die Struktur im Stapelspeicher reserviert (der in der Nähe der Programmiersprache ist), ob für die Klasse im Stapelspeicher sind nur für die Referenz und tatsächlichen Speicher sind im Heap-Speicher reserviert.

2Nd - Standardmäßig Struktur behandeln als eine öffentliche ob Klasse behandeln als eine private .

3Rd- kann den Code in der Struktur nicht wiederverwenden, aber in der Klasse können wir denselben Code mehrmals wiederverwenden, was als Inhärenz bezeichnet wird

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