Unterschied zwischen Konstruktor und Destruktor

Autor: Laura McKinney
Erstelldatum: 1 April 2021
Aktualisierungsdatum: 9 Kann 2024
Anonim
Konstruktor - Objektorientierte Programmierung in Java 3 ● Gehe auf SIMPLECLUB.DE/GO
Video: Konstruktor - Objektorientierte Programmierung in Java 3 ● Gehe auf SIMPLECLUB.DE/GO

Inhalt


Konstruktor und Destruktor sind die Memberfunktionen mit demselben Namen wie ihre Klasse. Ersterer Typ Konstrukteur Hilft bei der Initialisierung eines Objekts. Umgekehrt a Zerstörer unterscheidet sich von dem Konstruktor, der den erstellten Konstruktor löscht, wenn er keine Verwendung hat.

Manchmal ist es erforderlich, einen Teil eines Objekts zu initialisieren, bevor es verwendet werden kann. Wenn wir beispielsweise den Stapel bearbeiten, muss der obere Bereich des Stapels immer auf Null gesetzt werden, bevor wir eine Aktion ausführen. Diese Funktion der automatischen Initialisierung wird über den Konstruktor ausgeführt. Zum Beispiel, wenn ein Objekt Code ausführen muss, bevor es zerstört wird. Zum Beispiel, wenn ein Objekt eine Datei schließen muss, die es geöffnet hat, bevor es zerstört wird. Dies kann mit Hilfe von "Destructor" durchgeführt werden.

Lassen Sie uns anhand einer Vergleichstabelle einen Überblick über die grundlegenden Unterschiede zwischen Konstruktor und Destruktor geben


  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle:

VergleichsbasisKonstrukteurZerstörer
Zweck

Es ordnet den Speicher einem Objekt zu.Es gibt die Zuordnung des Speichers eines Objekts auf.
Erklärung Klassenname (Argumente falls vorhanden) {};~ class_name (keine Argumente) {};
Argumente Konstruktor akzeptiert Argument Destructor akzeptiert kein Argument.
BerufungDer Konstruktor wird automatisch aufgerufen, während das Objekt erstellt wird.Destruktor wird automatisch aufgerufen, wenn der Block verlassen oder das Programm beendet wird.
ArbeitenMit dem Konstruktor kann ein Objekt einen Teil seines Werts initialisieren, bevor es verwendet wird.Mit Destructor kann ein Objekt zum Zeitpunkt seiner Zerstörung Code ausführen.
Reihenfolge der Ausführung

Konstruktoren werden nacheinander aufgerufen.
Destruktor werden in umgekehrter Reihenfolge des Konstruktors aufgerufen.
In Zahlen Eine Klasse kann mehrere Konstruktoren enthalten.Es gibt immer einen einzelnen Destruktor in der Klasse.
Konstruktor kopieren Mit Copy Constructor kann ein Konstruktor ein Objekt eines anderen Objekts deklarieren und initialisieren.Kein solches Konzept.
Überladen Konstruktoren können überladen werden.Destruktor kann nicht überladen werden.


Definition des Konstruktors:

EIN Konstrukteur ist im Grunde eine Member-Funktion der Klasse, die das Objekt initialisiert und ihm Speicher zuweist. Konstruktoren können leicht identifiziert werden, wenn sie mit demselben Namen wie der der Klasse deklariert und definiert werden. Ein Konstruktor hat keinen Rückgabetyp. Sie geben also nichts zurück, auch nicht „nichtig“. Ein Konstruktor wird immer im öffentlichen Bereich einer Klasse definiert.

Eine Klasse kann mehrere Konstruktoren enthalten. Sie können anhand der Anzahl und der Art der übergebenen Argumente unterschieden werden. Wenn eine Klasse mehrere Konstruktoren enthält; zusammen mit ihnen muss der implizite Konstruktor (do-nothing-Konstruktor) definiert werden; es tut aber nichts, befriedigt den compiler.

Konstruktoren können auch mit den Standardargumenten definiert werden. Dabei initialisieren sie das Objekt auch „dynamisch“. Konstruktoren können weder vererbt noch virtuell sein, sie können jedoch überladen werden. Sie können nicht an ihre Adresse weitergeleitet werden.

Arten von Konstruktoren

Grundsätzlich gibt es drei Arten von Konstruktoren: Standardkonstruktoren, parametrisierte Konstruktoren und Kopierkonstruktoren.

  • Standardkonstruktor: Es ist ein Konstruktor, bei dem dem Konstruktor kein Argument übergeben wird. Der Standardkonstruktor hat keinen Parameter, aber die Werte an den Standardkonstruktor können standardmäßig (dynamisch) übergeben werden.
  • Parametrisierter Konstruktor: Diese Art von Konstruktor übernimmt die Argumente; Wir können den Datenelementen verschiedene Werte als Argumente übergeben.
  • Konstruktor kopieren: Copy-Konstruktor unterscheidet sich von anderen Konstruktortypen, da er die Adresse des anderen Objekts als Argument akzeptiert.

Implementierung des Konstruktors:

class Const {int a, b; public: Const () // Konstruktor ohne Parameter {a = 0; b = 0; } Const (int c, int d) {// Konstruktor mit Parameter a = c; c = d; }}; int main () {Const C1; C2 (10,20); // Diese Anweisung ruft den Konstruktor auf}

Wenn C1 erstellt wird, wird ein Konstruktor ohne Parameter ausgeführt, da C1 keinen Parameter übergibt. Beim Erstellen von C2 wird ein Konstruktor mit einem Parameter ausgeführt, da zwei Ganzzahlen an den Konstruktor übergeben werden.

Definition des Destruktors:

EIN Zerstörer ist auch eine Mitgliedsfunktion einer Klasse, die die Zuordnung des einem Objekt zugewiesenen Speichers aufhebt. Es wird mit demselben Namen wie der einer Klasse definiert, der ein vorangestelltes Tilde (~) Symbol. Destruktoren werden immer in umgekehrter Reihenfolge der Konstruktoren aufgerufen.

Es gibt immer einen einzelnen Destruktor in einer Klasse, da er keine Argumente akzeptiert. Lokale Objekte werden zerstört, sobald die Kontrolle über die Ausführung den Block verlässt. Andererseits werden globale Objekte zerstört, wenn das gesamte Programm beendet wird. Ein Destruktor wird implizit von einem Compiler aufgerufen. Wenn die Klassen geerbt werden und eine Klasse von einer übergeordneten Klasse abgeleitet ist und sowohl die untergeordnete Klasse als auch eine übergeordnete Klasse Destruktoren haben; Dann wird der Destruktor der abgeleiteten Klasse zuerst aufgerufen, gefolgt vom Destruktor der übergeordneten Klasse.

Implementierung des Destruktors:

class Const {int a, b; public: Const (int c, int d) // Konstruktor mit Parameter. {a = c; c = d; cout << "Wert von a und b ist" <<>

Wenn ein C1-Objekt erstellt wird, wird ein Konstruktor mit zwei Parametern vom Typ Integer aufgerufen, und das Element "a, b" wird initialisiert und der Wert von "a, b" wird bearbeitet. Danach wird der Destruktor aufgerufen und s das "Objekt C1 wird zerstört".

Brauchen Sie Destruktor

Die Erstellung des Konstruktors beansprucht eine gewisse Menge an Speicherplatz, da den Objekten letztendlich Speicher zugewiesen wird. Dieser zugewiesene Speicher muss freigegeben werden, bevor die Objekte zerstört werden, um die Ressourcen für andere Aufgaben freizugeben. Destruktoren sind für den beabsichtigten Zweck äußerst nützlich, da sie Objekte effektiv zerstören und Bereinigungsaufgaben zur Freigabe des Speichers ausführen.

  1. Der Hauptzweck eines Konstruktors besteht darin, den Objekten beim Erstellen Speicher zuzuweisen. Im Gegensatz dazu besteht der Hauptzweck eines Destruktors darin, den Speicher des Objekts freizugeben, wenn es zerstört wird.
  2. Ein Konstruktor darf die Argumente akzeptieren, da die Argumente zum Initialisieren der Datenelemente der Klasse verwendet werden können. Andererseits akzeptiert ein Destruktor keine Argumente, da seine einzige Arbeit darin besteht, den Speicher des Objekts freizugeben.
  3. Ein Konstruktor wird aufgerufen, wenn ein Objekt erstellt wird. Im Gegensatz dazu wird ein Destruktor aufgerufen, wenn ein Programm beendet wird oder das Programm den Block verlässt, in dem ein Objekt erstellt wird.
  4. Ein Konstruktor wird im Allgemeinen verwendet, um die Datenelemente der Klasse zu initialisieren, während ein Destruktor verwendet wird, um das Objekt eine Aktion ausführen zu lassen, bevor es zerstört wird.
  5. Konstruktoren werden in aufeinanderfolgender Reihenfolge ausgeführt. Wenn also eine abgeleitete Klasse vorhanden ist, die die Basisklasse erbt, und das Objekt der abgeleiteten Klasse erstellt wird, wird zuerst der Konstruktor der Basisklasse und dann der Konstruktor der abgeleiteten Klasse aufgerufen. Umgekehrt heißt der Destruktor der abgeleiteten Klasse zuerst und dann die Basisklasse, dh ein Destruktor wird in umgekehrter Reihenfolge des Konstruktors ausgeführt.
  6. In einer Klasse können mehrere Konstruktoren vorhanden sein, die durch die übergebenen Zahlenargumente identifiziert werden, wohingegen es nur einen Destruktor geben kann.
  7. Es gibt ein Konzept des Kopierkonstruktors, mit dem ein Objekt von einem anderen Objekt initialisiert werden kann, während der Destruktor kein solches Konzept hat.
  8. Konstruktoren können überladen sein, um unterschiedliche Aktionen unter dem Namen des gleichen Konstruktors auszuführen. Im Gegenteil, Destruktoren können nicht überladen werden.

Fazit:

Abgesehen von der Ähnlichkeit sind Konstruktor und Destruktor die spezielle Elementfunktion einer Klasse und haben denselben Namen. Der wesentliche Unterschied zwischen beiden besteht darin, dass "Konstruktor" zum Zeitpunkt der Speicherzuweisung und "Destruktor" zum Zeitpunkt der Speicherzuweisung aufgerufen wird Zeitpunkt der Freigabe des Objektspeichers. Sowohl Konstruktor als auch Destruktor werden implizit vom Compiler aufgerufen, obwohl sie in der Klasse nicht definiert sind.