Unterschied zwischen Klasse und Struktur

Bevor wir den Unterschied zwischen Class und Struct verstehen, sollten wir einige grundlegende Konzepte kennen, die mit ihnen verbunden sind. Ohne Verständnis der Begriffe ist es schwierig, die Unterschiede zwischen den beiden zu verstehen.

Was ist Klasse und Objekt:

Dies sind die zwei wichtigen Konzepte, die sich auf die objektorientierte Programmierung beziehen. Sie bilden die Grundlage für die Gestaltung der Funktionen und der Datenübergabe an andere Funktionen. Zum besseren Verständnis können wir es einem realen Beispiel zuordnen. Eine Klasse kann als Geschäft betrachtet werden, und ein Objekt kann jedes einzelne, spezifische Geschäft wie Lebensmittelgeschäft, Schreibwaren, Obst usw. sein. Alle Objekte haben die gemeinsamen Eigenschaften der Hauptklasse - des Geschäftes - und ihrerseits. Die Objekte können ihre eigenen exklusiven Eigenschaften haben, z. B. ein bestimmtes Design, eine Beleuchtung usw. Durch die Objekte können wir die Klasse tatsächlich verwenden. Sie bilden die Instanzen einer Klasse.

Syntax einer Klasse

Klassenspeicher

öffentliche Saitensachen;

öffentliches String Design;

Syntax eines Objekts

Lebensmittelgeschäft speichern = neues Geschäft ();

Store Stationery = new Store ();

Was ist eine Struktur??

Eine Struktur enthält nur die Daten. Daher ist es hilfreich, die einzelnen Datenanforderungen durch die Strukturobjekte zu erfassen. Im Gegensatz zu einer Klasse fehlen Funktionen. Hier ist die Syntax:

Struktur Lebensmitteleinkauf

char eingangsname [50];

int entry_size;

grocery_entrance;

Alle Geschäfte können den "Eingang" von Struct mit individuellen Namen und Größen verwenden.

Was ist Vererbung??

Es ist ähnlich, wie ein Sohn die Besitztümer seines Vaters erbt, und der Sohn kann auch andere eigene Besitztümer hinzufügen. Die Klasse kann entweder eine Basisklasse oder eine abgeleitete Klasse sein, in der die erstere als Basis für die letztere verwendet werden kann. Die abgeleitete Klasse fügt nur wenige andere Eigenschaften für sich hinzu, abgesehen von dem, was sie von der Basisklasse erhält. Wenn wir das obige Beispiel betrachten, kann der Lebensmittelladen immer noch zu einem bestimmten Lebensmittelladen, z. B. einem XYZ-Lebensmittelladen, abgeleitet werden.

Nun, da wir mit den grundlegenden Konzepten vertraut sind, können wir auf den Unterschied zwischen Class und Struct eingehen.

Wie unterscheiden sie sich??

  • Wiederverwendbarkeit: Da Klassen das Grundgerüst bilden, können sie wiederverwendet werden. Strukturen sind jedoch einzelne Elemente mit bestimmten Eigenschaften, so dass sie nicht wiederverwendet werden können. Zum Beispiel kann die Lebensmittelgeschäftsklasse für jede Art von Lebensmittelgeschäft verwendet werden, aber der Struct lebensmitteleintrittspunkt ist nur für diesen Zweck spezifisch und es ist sinnlos, ihn in anderen Klassen erneut zu verwenden.
  • Sichtweite: Alle Funktionen in einer Klasse sind für ihre Objekte öffentlich verfügbar. Zum Beispiel haben wir eine Funktion namens "Dinge" unter der Klasse "Store". Die Funktion "Dinge" ist für alle ihre Objekte sichtbar, wie z. B. "Lebensmittelgeschäft", "Schreibwarenladen" usw. Eine solche Sichtbarkeit ist bei Structs nicht möglich, da die Daten von struct auf sich selbst und für andere Structs nicht sichtbar sind. Um es klar zu machen, können wir sagen, dass die Daten von 'grocery_entrance' nicht für alle anderen Stores öffentlich sichtbar sind.
  • Pass als Referenz & Pass by Value: Beim Referenz übergeben wird nur der Speicherort und nicht die tatsächlichen Daten an die Funktionen gesendet. Dies bedeutet, dass sich die Änderung bei jeder Änderung des Werts in den entsprechenden Funktionen widerspiegelt. Bei Wert übergeben wird der Wert an die Funktion gesendet. In diesem Fall wird eine Änderung des Werts nach dem Senden nicht in der Funktion angezeigt. Klassenverwendung wird als Referenz übergeben, und Struct verwendet den Wert für die Weitergabe.
  • Erbe: Klassen können weiter vererbt werden, um Unterklassen zu bilden, Structs kann jedoch keine Vererbung verwenden. Beispielsweise gibt der Class Store seine Funktionen an die Unterklasse "Lebensmittelgeschäft" ab. Die Struktur 'grocery_entrance' kann jedoch keine Funktion erben. Wir können sagen, dass es hier kein Konzept wie eine Unterkonstruktion gibt.
  • Standardsichtbarkeit: Alle Mitglieder einer Klasse werden standardmäßig als private Entitäten gehalten, während die Mitglieder einer Struktur standardmäßig als öffentliche Entitäten gehalten werden.
  • Die Größe einer leeren Klasse und Struktur: Class verwendet eine Größe von 1 Byte, auch wenn sie leer ist, wohingegen Struct niemals Speicher verwendet, wenn er leer ist. Das heißt, wir können sagen, dass die Größe einer leeren Struktur 0 Bytes entspricht.
  • Müllsammlung: Die Sammlung von Müll ist mit Klassen möglich, da diese als Referenz verwendet werden. Daher ist es einfacher, die Bereinigung an einem Ort durchzuführen, an dem die Daten gespeichert sind. Auf der anderen Seite ist bei Struct keine Speicherbereinigung möglich, da hier Wert nach Wert verwendet wird und die Daten an verschiedenen Orten verstreut sind.
  • Speicherverwaltung: Da Class Speicherbereinigungen zulässt, ist auch die Speicherverwaltung effektiv. Bei Structs ist es jedoch nicht so effektiv.
  • Konstrukteur: Ein Konstruktor initialisiert die Klasse im Allgemeinen mit bestimmten angegebenen Werten. Wir können es als etwas betrachten, das mit Werten initialisiert wurde. Wenn eine neue Klasse erstellt werden muss, wird der Konstruktor aufgerufen, um Speicher für diese Instanz zuzuweisen. Wir können sogar Werte als Argumente übergeben, während wir einen Konstruktor aufrufen. Kommen wir jetzt zu unserer eigentlichen Diskussion. Klassen erlauben Konstruktoren aller Typen, beispielsweise mit oder ohne Argumente, während Strukturen nur Konstruktoren mit Argumenten zulassen, d. H. Die parametrisierten Konstruktoren.
  • Zerstörer: Ein Destruktor wird immer dann aufgerufen, wenn wir eine Instanz einer Klasse löschen müssen. Der Destruktor löscht seinerseits diese Instanz und gibt Speicher frei. Eine Klasse kann einen Destruktor verwenden, eine Struct dagegen nicht.
  • Member-Variablen-Initialisierung: In Klassen können wir die Member-Variablen direkt initialisieren. Eine solche Initialisierung ist bei Structs nicht möglich.
  • Objekterstellung: Die allgemeine Syntax für die Objekterstellung in Klassen lautet:

Demo obj = neue Demo ();

Das bedeutet, dass wir beim Erstellen von Objekten einer Klasse das Schlüsselwort 'new' verwenden müssen. Dies ist nicht erforderlich, wenn Objekte von Structs erstellt werden. Schauen Sie sich einfach die Syntax an:

Demo obj;

Es funktioniert auch ohne das Stichwort "new" einwandfrei.

Wann sollte Klasse verwendet werden und wann sollte Struct verwendet werden??

Da die Klassen beim Umgang mit Daten und Funktionen flexibler sind, können wir dies tun, wenn die verwendeten Objekte komplex und umfangreich sind. In unserem Beispiel kann eine Mall die Klasse "store" verwenden, um das System besser auszudrücken. Strukturen sind jedoch auf kleinere Objekte beschränkt, da sie vergleichsweise weniger effektiv sind als Klassen. Wenn Sie also ein eigenes Geschäft entwerfen, ist Structs die bessere Wahl.

Wie konvertiere ich ein Struct in eine Klasse und umgekehrt??

Möglicherweise haben Sie die Begriffe "Boxen" und "Unboxing" gehört, um ein Struct in eine Klasse zu konvertieren und umgekehrt. Obwohl dies effektive Prozesse sind, die uns bei der Konvertierung unterstützen, sollten sie mit Vorsicht behandelt werden. Da dies sich direkt auf die Speicherorte auswirkt, hat dies erhebliche Auswirkungen auf die Leistung unseres Systems. Darüber hinaus beeinflusst es die Abfallsammelprozesse und führt zu einer Ineffizienz des Gesamtsystems. Verwenden Sie diese Konvertierungen daher nur bei Bedarf.

Betrachten wir die oben genannten Unterschiede in Tabellenform.

S.Nr Konzepte Unterschiede
Klasse Struktur
1 Wiederverwendbarkeit Vollständig wiederverwendbar Nicht wiederverwendbar
2 Sichtweite Alle Funktionen einer Klasse sind für ihre Objekte sichtbar Die Daten eines Objekts einer Struktur sind für andere Objekte derselben Struktur nicht sichtbar
3 Referenz übergeben & Wert übergeben Verwendet Pass by Reference Verwendet Pass nach Wert
4 Erbe Die Funktionen einer Klasse können von ihren Unterklassen vererbt werden. erlaubt Vererbung Erlaubt niemals Vererbung
5 Standardsichtbarkeit Alle Mitglieder einer Klasse sind standardmäßig privat Alle Mitglieder einer Struktur sind standardmäßig öffentlich
6 Größe wenn leer Die Größe einer leeren Klasse beträgt 1 Byte Die Größe der leeren Struktur beträgt 0 Bytes
7 Müllsammlung Da es als Referenz verwendet wird, ist die Speicherbereinigung möglich Da der Wert als Wert übergeben wird, ist die Garbage Collection nicht möglich
8 Speicherverwaltung Die Einfachheit des Speicherbereinigungsprozesses hilft bei der effektiven Speicherverwaltung Das Fehlen einer Speicherbereinigung führt zu einer schlechten Speicherverwaltung
9 Konstruktoren Erlaubt Konstruktoren aller Art, z. B. mit oder ohne Parameter Erlaubt nur parametrisierte Konstruktoren
10 Zerstörer Kann es benutzen Kann es nicht benutzen
11 Member-Variablen-Initialisierung Ermöglicht die direkte Initialisierung von Membervariablen Erlaubt keine direkte Wortinitialisierung von Mitgliedsvariablen
12 Objekterstellung Das Schlüsselwort 'new' muss während der Objekterstellung verwendet werden Es ist optional, das Schlüsselwort 'new' während der Objekterstellung zu verwenden
13 Wann verwenden?? Besser für größere und komplexe Objekte, bei denen Vererbung erforderlich ist Besser für kleinere und einfachere Objekte, bei denen Vererbung von geringerer Bedeutung ist.

Wir haben fast alle Unterschiede zwischen Class und Struct aufgedeckt. Wenn Sie das Gefühl haben, dass etwas fehlt, teilen Sie uns dies bitte mit. Lass uns zusammen lernen und dieses Wissen bestmöglich nutzen!