Frage

Diese Frage war bereits im Zusammenhang mit C#/.Net gefragt.

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 beginne mit einem offensichtlichen Unterschied:

  • Wenn Sie es nicht angeben public: oder private:, Mitglieder einer Struktur sind standardmäßig öffentlich;Mitglieder einer Klasse sind standardmäßig privat.

Ich bin sicher, dass es noch weitere Unterschiede in den obskuren Ecken der C++-Spezifikation gibt.

War es hilfreich?

Lösung

Sie vergessen, den schwierigen zweiten Unterschied zwischen Klassen und Strukturen.

Quoth der Norm (§11.2.2 in C ++ 98 bis C ++ 11):

  

In Abwesenheit eines access-specifier   für eine Basisklasse, wird öffentlich angenommen   wenn die abgeleitete Klasse deklariert    struct und privaten angenommen wird, wenn die Klasse deklariert ist Klasse .

Und nur der Vollständigkeit halber, die bekannteren Unterschied zwischen Klasse und Struktur definiert in (11.2):

  

Mitglied einer Klasse mit dem definierten   Stichwort Klasse ist privat von   Standard. Mitglieder einer Klasse definiert   mit den Keywords struct oder Vereinigung   sind öffentlich standardmäßig aktiviert.

Weiterer Unterschied:. Das Schlüsselwort class verwendet werden kann Template-Parameter zu erklären, während das struct Schlüsselwort nicht so verwendet werden kann,

Andere Tipps

Die C ++ FAQ ,

  

[7.8] Was ist der Unterschied zwischen   die Schlüsselwörter struct und Klasse?

     

Die Mitglieder und Basisklassen ein   struct sind standardmäßig öffentlich, während in   Klasse, sie privaten Standard. Hinweis:   Sie sollten Ihre Basisklassen machen   ausdrücklich öffentlich, privat oder   geschützt, anstatt sich auf die Berufung   Standardwerte.

     

Struct und Klasse ist anders   funktionell äquivalent.

     

OK, genug von diesem quietschsauber   Techno-Talk. Emotional, die meisten   Entwickler machen eine starke Unterscheidung   zwischen einer Klasse und einer Struktur. EIN   Struktur fühlt sich einfach wie ein offener Haufen   von Bits mit sehr wenig in der Art von   Verkapselung oder Funktionalität. EIN   Klasse fühlt sich an wie ein Wohn- und   verantwortungsbewusstes Mitglied der Gesellschaft mit   intelligente Dienste, eine starke   Einkapselung Barriere und eine gut   definierte Schnittstelle. Da das ist die   Konnotation die meisten Menschen bereits haben,   Sie sollten wahrscheinlich die Struktur verwenden   Schlüsselwort, wenn Sie eine Klasse, die hat   nur sehr wenige Methoden und öffentliche Daten hat   (Solche Dinge existieren in gut gestaltet   Systeme!), aber ansonsten sollten Sie   wahrscheinlich die Klasse Schlüsselwort verwenden.

Es lohnt sich, sich an die Ursprünge von C++ in C und die Kompatibilität mit C zu erinnern.

C hat Strukturen, es gibt kein Kapselungskonzept, also ist alles öffentlich.

Standardmäßig öffentlich zu sein, wird im Allgemeinen als schlechte Idee angesehen, wenn man einen objektorientierten Ansatz verfolgt. Daher war es eine schlechte Idee, eine Form von C zu erstellen, die von Haus aus für OOP förderlich ist (Sie können OO in C ausführen, aber es wird Ihnen nicht helfen). Idee in C++ (ursprünglich „C With Classes“) macht es Sinn, Mitglieder standardmäßig privat zu machen.

Andererseits, wenn Stroustrup die Semantik von geändert hätte struct Wenn also seine Mitglieder standardmäßig privat wären, wäre die Kompatibilität beeinträchtigt worden (das trifft nicht mehr so ​​oft zu, da die Standards voneinander abweichen, aber alle gültigen C-Programme waren auch gültige C++-Programme, was einen großen Einfluss darauf hatte, dass C++ Fuß fasste).

Also ein neues Schlüsselwort, class wurde eingeführt, um genau wie eine Struktur zu sein, jedoch standardmäßig privat.

Wenn C++ von Grund auf ohne Geschichte entstanden wäre, hätte es wahrscheinlich nur ein solches Schlüsselwort.Es hätte wahrscheinlich auch nicht die Wirkung gehabt, die es hatte.

Im Allgemeinen neigen Menschen dazu, struct zu verwenden, wenn sie etwas tun, etwa wie Strukturen in C verwendet werden;öffentliche Mitglieder, kein Konstruktor (solange es nicht in einer Union ist, Sie dürfen haben Konstruktoren in Strukturen, genau wie bei Klassen, aber die Leute neigen dazu, dies nicht zu tun), keine virtuellen Methoden usw.Da es bei Sprachen sowohl um die Kommunikation mit Menschen, die den Code lesen, als auch um die Anleitung von Maschinen geht (ansonsten bleiben wir bei Assembler- und rohen VM-Opcodes), ist es eine gute Idee, dabei zu bleiben.

Class' Mitglieder sind standardmäßig privat. Struct-Mitglieder sind standardmäßig öffentlich. Außerdem gibt es keine weiteren Unterschiede. Siehe auch diese Frage .

Nach Stroustrup in der C ++ Programming Language :

  

Welche Art, die Sie verwenden, hängt von den Umständen und Geschmack. Ich ziehe es in der Regel struct für Klassen zu benutzen, die alle Daten öffentlich sind. Ich denke an solche Klassen als „nicht ganz richtigen Typen, nur Datenstrukturen.“

Funktionell gibt es keinen Unterschied außer dem öffentlichen / privaten

STRUCT ist eine Art abstrakten Datentypen, die einen bestimmten Teil des Speichers aufteilt entsprechend die Struktur-Spezifikation. Structs sind besonders in der Datei Serialisierung / Deserialisierung nützlich als die Struktur oft in die Datei wörtlich geschrieben werden kann. (Das heißt ein Erhalten Zeiger auf die Struktur, um die Größe Makro die Anzahl von Bytes zu berechnen, zu kopieren, dann bewegen sich die Daten in das oder aus dem Struct.)

Die Klassen sind eine andere Art von abstrakten Datentyp, der Informationen versteckt, um sicherzustellen, versuchen. Intern kann es eine Vielzahl von Machenschaften, Methoden sein, temporären Variablen, Zustandsvariablen. usw., die alle eine einheitliche API für jeden Code zu präsentieren verwendet, die die Klasse verwenden möchte.

In der Tat structs sind etwa Daten, sind Klassen über Code.

Allerdings müssen Sie verstehen, dass diese lediglich Abstraktionen. Es ist durchaus möglich, Strukturen zu schaffen, die viel wie Klassen und Klassen aussehen, die viel wie structs aussehen. In der Tat waren die erste C ++ Compiler nur Pre-Compiler, die C ++ Code zu C. So ist diese Abstraktionen sind ein Vorteil für die logische Denken übersetzt, die nicht unbedingt eine Bereicherung für den Computer selbst.

Neben der Tatsache, dass jeder eine andere Art von Abstraktion ist, bietet Klassen-Lösungen für den C-Code Namensgebung Rätsel. Da Sie nicht mehr als eine Funktion mit dem gleichen Namen ausgesetzt haben können, verwendeten Entwickler ein Muster von _ zu folgen (). z.B. mathlibextreme_max (). Durch die Gruppierung von APIs in Klassen, die ähnlichen Funktionen (hier nennen wir sie „Methoden“) zusammengefasst und von der Benennung von Methoden in anderen Klassen geschützt werden kann. Dies ermöglicht es den Programmierer seinen Code besser zu organisieren und die Wiederverwendung von Code zu erhöhen. Theoretisch zumindest.

1) Die Mitglieder einer Klasse sind standardmäßig privat und Mitglieder der Struktur sind standardmäßig öffentlich.

Zum Beispiel Programm 1 nicht in der Zusammenstellung und Programm 2 funktioniert gut.

// Program 1
#include <stdio.h>

class Test {
    int x; // x is private
};
int main()
{
  Test t;
  t.x = 20; // compiler error because x is private
  getchar();
  return 0;
}
Run on IDE
// Program 2
#include <stdio.h>

struct Test {
    int x; // x is public
};
int main()
{
  Test t;
  t.x = 20; // works fine because x is public
  getchar();
  return 0;
}

2) Wenn eine Struktur aus einer Klasse / Struktur abzuleiten, Standardzugriffs-Spezifizierer für eine Basis Klasse / Struktur ist öffentlich. Und wenn eine Klasse abzuleiten, Standard Zugriffsbezeichner ist privat.

Zum Beispiel Programm 3 nicht in der Zusammenstellung und Programm 4 funktioniert.

// Program 3
#include <stdio.h>

class Base {
public:
    int x;
};

class Derived : Base { }; // is equilalent to class Derived : private Base {}

int main()
{
  Derived d;
  d.x = 20; // compiler error becuase inheritance is private
  getchar();
  return 0;
}
Run on IDE
// Program 4
#include <stdio.h>

class Base {
public:
    int x;
};

struct Derived : Base { }; // is equilalent to struct Derived : public Base {}

int main()
{
  Derived d;
  d.x = 20; // works fine becuase inheritance is public
  getchar();
  return 0;
}

Der einzige andere Unterschied ist die Standard-Vererbung von Klassen und Strukturen, die wenig überraschend, bzw. private und öffentlich ist.

Nicht in der Beschreibung Nr. Der wesentliche Unterschied liegt in Programmierer Erwartungen, wenn sie den Code in 2 Jahren lesen. structs werden oft angenommen POD sein. Structs werden auch in Metaprogrammierung verwendet, wenn Sie einen Typ für andere Zwecke als die Definition Objekte sind zu definieren.

Eine andere Sache zu beachten, wenn Sie einen Legacy-App aktualisiert, die structs hatten Klassen verwenden Sie in das folgende Problem führen könnten:

Alter Code hat structs, Code wurde aufgeräumt und diese Klassen geändert. Eine virtuelle Funktion oder zwei wurde dann auf die neue, aktualisierte Klasse hinzugefügt.

Wenn virtuelle Funktionen in Klassen werden dann intern wird der Compiler zusätzliche Zeiger auf die Klassendaten ergänzt die Funktionen zeigen.

Wie würde dies alte Legacy-Code brechen ist, wenn in dem alten Code irgendwo wurde die Struktur mit memfill gelöscht, um alles zu Nullen zu löschen, würde dies auch die zusätzlichen Zeigerdaten stampft.

  1. Die Mitglieder einer Struktur sind standardmäßig öffentlich, sind die Mitglieder der Klasse standardmäßig privat.
  2. Standardvererbung für Struktur aus einer anderen Struktur oder Klasse ist public.Default Erbe für die Klasse von einer anderen Struktur oder Klasse ist privat.
class A{    
public:    
    int i;      
};

class A2:A{    
};

struct A3:A{    
};


struct abc{    
    int i;
};

struct abc2:abc{    
};

class abc3:abc{
};


int _tmain(int argc, _TCHAR* argv[])
{    
    abc2 objabc;
    objabc.i = 10;

    A3 ob;
    ob.i = 10;

    //A2 obja; //privately inherited
    //obja.i = 10;

    //abc3 obss;
    //obss.i = 10;
}

Dies ist auf VS2005.

Ein weiterer Hauptunterschied ist, wenn es um Vorlagen kommt. Soweit ich weiß, können Sie eine Klasse verwenden, wenn Sie eine Vorlage definieren, aber nicht eine Struktur.

template<class T> // OK
template<struct T> // ERROR, struct not allowed here
  1. Mitglied einer Klasse mit dem Schlüsselwort class definiert ist standardmäßig private. Die Mitglieder einer Klasse mit den Schlüsselwort struct definiert (oder union) standardmäßig public werden.

  2. In Abwesenheit eines Access-Spezifizierer für eine Basisklasse, public wird angenommen, wenn die abgeleitet Klasse struct deklariert und private wird angenommen, wenn die Klasse class deklariert wird.

  3. Sie können eine enum class erklären, aber nicht ein enum struct.

  4. Sie können template<class T> verwenden, aber nicht template<struct T>.

Beachten Sie auch, dass die C ++ Standard Ihnen einen Typen als struct zu zukunfts erklären kann, und dann class verwenden, wenn die Art und umgekehrt zu deklarieren. Auch std::is_class<Y>::value ist true für Y ein struct und ein class zu sein, aber ist false für eine enum class.

Hier ist eine gute Erklärung: http://carcino.gen.nz/tech /cpp/struct_vs_class.php

  

Also, noch einmal:. In C ++, eine Struktur mit Ausnahme einer Klasse identisch ist, dass die Mitglieder einer Struktur standardmäßig öffentliche Sichtbarkeit haben, aber die Mitglieder einer Klasse haben standardmäßig privat Sichtbarkeit

Es ist nur eine Konvention. Structs kann erstellt werden, um einfache Daten zu halten, aber später mit dem Zusatz von Elementfunktionen und Konstrukteure zu entwickeln. Auf der anderen Seite ist es ungewöhnlich, etwas anderes als öffentlich zu sehen. Zugriff in einer Struktur

  

ISO IEC 14882-2003

     

9 Klassen

     

§3

     

Eine Struktur ist eine Klasse definiert mit   die Klasse-Taste struct; seine Mitglieder   und Basisklassen (Ziffer 10)   standardmäßig öffentlich (Ziffer 11).

Die anderen Antworten haben die privaten / öffentlichen Standardwerte genannt, (aber beachten Sie, dass eine Struktur eine Klasse ist eine Struktur, sie sind nicht zwei verschiedene Elemente, nur zwei Möglichkeiten, das gleiche Element definiert wird).

Was könnte interessant sein, zu beachten (insbesondere, da die Fragesteller wahrscheinlich MSVC sein ++ verwenden, da er „unmanaged“ C ++ Nennungen) ist, dass Visual C ++ unter bestimmten Umständen beschwert, wenn eine Klasse mit class deklariert und dann mit struct definiert (oder möglicherweise umgekehrt), obwohl der Standard sagt, dass vollkommen legal ist.

  • . In den Klassen alle Mitglieder sind standardmäßig privat, aber in der Struktur Mitglieder sind standardmäßig öffentlich.

    1. Es gibt keinen Begriff wie Konstruktor und Destruktor für structs, aber für die Klasse Compiler erstellt standardmäßig, wenn Sie nicht bieten.

    2. Sizeof leere Struktur ist 0 Bytes wer als Sizeof leere Klasse 1 Byte ist die Struktur Standardzugriffstyp öffentlich ist. Eine Struktur sollte typischerweise für die Gruppierung der Daten verwendet werden.

    Die Klasse Standard-Zugriffstyp ist privat, und der Standardmodus für Vererbung ist privat. Eine Klasse soll für die Gruppierung von Daten verwendet werden und Methoden, die auf diesen Daten arbeiten.

    Kurz gesagt, ist die Konvention Struktur zu verwenden, wenn der Zweck ist Gruppendaten und Klassen verwenden, wenn wir Datenabstraktion erfordern und, vielleicht Vererbung.

    In C ++ Strukturen und Klassen werden von Wert übergeben, sofern nicht ausdrücklich dereferenzierte. In anderen Sprachen Klassen und Strukturen haben unterschiedliche Semantik - dh. Objekte (Instanzen von Klassen) können übergeben werden durch Bezugnahme und Strukturen können durch Wert übergeben werden. Hinweis: Es gibt Kommentare mit dieser Frage verbunden ist. Siehe die Diskussion Seite fügen Sie das Gespräch.

Während andere Antworten impliziert, ist es nicht explizit erwähnt - dass structs sind C kompatibel, je nach Nutzung; Klassen sind es nicht.

Das bedeutet, wenn Sie einen Header schreiben, welcher Sie C kompatibel sein wollen, dann haben Sie keine andere Wahl, als Struktur (die in der C-Welt funktioniert nicht haben können, aber können Funktionszeiger haben)

Der Unterschied zwischen class und struct ist ein Unterschied zwischen Keywords, nicht zwischen Datentypen. Diese zwei

struct foo : foo_base { int x;};
class bar : bar_base { int x; };

beide definieren einen Klassentyp. Die Differenz der Schlüsselwort in diesem Zusammenhang ist der unterschiedliche Standardzugriff:

  • foo::x ist öffentlich und foo_base vererbt öffentlich
  • bar::x ist privat und bar_base vererbt privat

Klasse ist im Rahmen des Software-Engineering nur sinnvoll. Im Rahmen der Datenstrukturen und Algorithmen, Klasse und Struktur ist nicht so verschieden. Es gibt keine jede Regel beschränkt, die Klasse des Mitglieds referenziert werden muss.

Wenn großes Projekt der Entwicklung mit Tonnen von Menschen ohne Klasse, können Sie schließlich kompliziert gekoppelt Code bekommen, weil jeder, was Funktionen und Daten verwenden, die sie wollen. Klasse stellt Erlaubnis Kontrollen und inherents Entkopplung und Wiederverwendung von Codes zu verbessern.

Wenn Sie einige Software-Engineering-Prinzipien lesen, werden Sie den meisten Standards finden können nicht einfach ohne Klasse implementiert werden. zum Beispiel: http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29

BTW, wenn eine Struktur ein Knirschen von Speicher reserviert und mehrere Variablen enthält, Werttyp Variablen gibt an, dass Werte embbeded in denen Struktur zugeordnet ist. Im Gegensatz dazu sind die Referenztypen Variablenwerte externe und Referenz durch einen Zeiger, der auch in eingebettet ist, wo Struktur zugeordnet ist.

Sie können diese Leitlinien für die bei der für Struktur oder Klasse zu gehen, https://msdn.microsoft.com/en-us/library/ms229017%28v=vs.110%29.aspx .

  

√ BERÜCKSICHTIGEN eine Struktur statt einer Klasse definieren, wenn Instanzen der   Typ sind klein und häufig kurzlebig oder sind häufig eingebettet in   andere Objekte.

     

X AVOID definieren eine Struktur, wenn der Typ alle hat   die folgenden Eigenschaften:

     

Es stellt logisch einen einzigen Wert,   ähnlich wie primitive Typen (int, double, etc.).

     

Es hat eine Instanz   Größe unter 16 Bytes.

     

Es ist unveränderlich.

     

Es wird nicht verpackt werden müssen   häufig.

Der Unterschied zwischen struct und Klasse Schlüsselwörter in C ++ ist, dass, wenn es keine spezifischen Bezeichner auf bestimmten Art zusammengesetzte Daten dann durch Standard struct oder Union ist die öffentlichen Keywords, die lediglich Daten versteckt hält, sondern Klasse ist das private Schlüsselwort, das Versteck von Programmcodes oder Daten berücksichtigt. Immer einige Programmierer verwenden struct für Daten und Klasse für Code willen. Für weitere Informationen wenden Sie anderen Quellen.

Aus all diesen Faktoren kann gefolgert werden, dass Konzept der Klasse sehr gut geeignet ist reale Welt zu repräsentieren Objekte und nicht als „Structures“ .Largely weil OOP-Konzepte in der Klasse verwendet, sehr praktisch sind daher bei der Erklärung reale Szenarien einfacher, sie zu verschmelzen ein Beispiel reality.For, Standard ist die Vererbung für structs Öffentlichkeit aber wenn wir diese Regel für reale Welt anwenden, ist es in einer Klasse Standard-Vererbung ist privat ridiculous.But was realistischer ist.

Wie auch immer, was ich brauche, zu rechtfertigen ist Klasse ist ein viel breiteres, reale Welt anwendbar Konzept während Struktur ein primitives Konzept mit einem schlechten interner Organisation ist (Eventhough Struktur folgt OOP-Konzepten, sie haben eine schlechte Bedeutung)

Der wesentliche Unterschied zwischen Struktur und Klasse Schlüsselwort in oops ist, dass keine öffentliche und private Mitglied Erklärung in structure.and das Datenelement und Member-Funktion kann als öffentlich definiert werden, sowohl private als auch geschützt.

Ich fand einen anderen Unterschied. wenn Sie nicht über einen Konstruktor in einer Klasse definieren, wird der Compiler einen definieren. aber in einer Struktur, wenn Sie nicht einen Konstruktor definieren, der Compiler nicht definiert einen Konstruktor zu. so in einigen Fällen, dass wir nicht wirklich einen Konstruktor benötigen, Struktur ist eine bessere Wahl (Leistungsspitze). und sorry für mein schlechtes Englisch.

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 mit dem neuen Operator erstellen, der dieser Klasse Speicher 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;Die Anweisung gibt an, dass beide Variablen vom Typ MyClass sind

  1. myClassObject1
  2. myClassObject2

und zeigt auf denselben Speicherort.
Grundsätzlich wird derselbe Speicherort einer anderen Variablen desselben Typs zugewiesen.

Wenn also Änderungen, die wir an einem der Objekte vom Typ MyClass vornehmen, Auswirkungen auf ein anderes haben
da beide auf denselben Speicherort verweisen.

"_myclassObject1.datamember = 10;" In dieser Zeile enthalten beide Datenmitglieder des Objekts den Wert von 10.
"_myClassObject2.Datamember = 20;" In dieser Zeile enthält das Datenmitglied des Objekts den Wert von 20.
Letztlich, 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
Instanziieren des Objekts vom Typ MyStructure mit dem neuen Operator und
Speichern der Adresse in der Variablen _myStructObject vom Typ MyStructure und
Zuweisen des Werts 10 zum Datenelement der Struktur mithilfe von „_myStructObject1.DataMember = 10“.

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

Welche Änderung wir auch immer an _myStructObject1 vornehmen, 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 die Struktur ist ValueType, die von Object erbt.
Klassen unterstützen eine Vererbung, Strukturen hingegen nicht.

Wie sagen wir das?
Und was ist der Grund dafür?
Die Antwort ist Klassen.

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

Der wesentliche Unterschied zwischen Struktur und Klasse ist, dass in struct können Sie nur Datenvariablen unterschiedlicher Datentypen deklarieren, während in der Klasse können Sie Datenvariablen deklarieren, Member-Funktionen und somit können Sie Datenvariablen durch Funktionen manipulieren.

-> eine andere praktische Sache, die ich vs Struktur in der Klasse zu finden, ist, dass, während Dateien in einem Programm der Umsetzung, wenn Sie bestimmte Operationen einer Struktur immer wieder auf jeden neuen Satz von Operationen machen wollen müssen Sie eine separate Funktion machen und Sie müssen Objekt der Struktur passieren, nachdem sie aus der Datei zu lesen, um einige Operationen auf sie zu machen.    während in der Klasse, wenn Sie eine Funktion, die hat einige Operationen an den Daten machen benötigt everytime..its einfach müssen Sie nur noch Objekt aus einer Datei lesen und die Funktion aufrufen ..

Aber es depennds auf dem Programmierer, die Art, wie er / sie geeignet findet ... nach mir lieber i Klasse jedes Mal, nur weil es OOPs unterstützt und das ist der Grund, warum es alle Sprachen und seine die wunderbare Funktion aller Zeiten in fast umgesetzt wird Programmierung; -)

Und ja die unvergessene Unterschied i vergaß zu erwähnen ist, dass Klasse unterstützt Verstecken von Daten und unterstützt auch Operationen, die in Datentypen, während struct doesnt auf gebaut durchgeführt werden!

** UPDATE: ** Bitte diese Antwort ignorieren. Ich habe nicht die Möglichkeit, dass für die Struktur, der Wert war nicht initialisierten aber gerade passiert ist 0. Es ist keine Initialisierung Unterschied zwischen Struktur und Klasse sein.


Ich sehe einen anderen Unterschied zwischen structs und Klassen, die mit Standard-Initialisierung zu tun.

struct Foo {
    int a;
};

class Bar {
    int a;
};

class Tester {
    Foo m_Foo = Foo();
    Bar m_Bar = Bar();

public:
    Tester() {}
};

int main() {
    auto myTester = Tester();
}

Führen Sie diesen Code und untersuchen myTester. Sie werden feststellen, dass für m_Foo, die Struktur hat m_Foo.a auf 0 initialisiert wurde, aber für m_Bar, die Klasse ist m_Bar.a nicht initialisiert. So gibt scheint ein Unterschied zu sein in dem, was der Standard-Konstruktor tut für struct vs. Klasse. Ich bin dies mit Visual Studio zu sehen.

Es gibt 3 grundlegenden Unterschied zwischen Struktur und Klasse

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

2Nd - Standardmäßig Struktur treat als öffentliches ob Klasse behandelt als privates

.

3.- kann nicht -use Code in der Struktur neu, aber in der Klasse können wir denselben Code in vielen Zeit inhertence

genannt wiederverwenden
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top