C++ Klassenkonstruktor & Destruktor
Klassenkonstruktor
KlasseKonstruktorEin Konstruktor ist eine spezielle Memberfunktion einer Klasse, die automatisch ausgeführt wird, sobald ein neues Objekt der Klasse erzeugt wird.
Der Name des Konstruktors ist genau derselbe wie der Name der Klasse, und er hat keinen Rückgabetyp (nicht einmalvoidbedeutet, dass b ein Objektarray der Klasse AB ist, das 3 Objekte enthält; daher wird der Konstruktor 3 Mal aufgerufen;
bedeutet, dass p ein Objektzeigerarray der Klasse AB ist, das 4 Klassenobjektzeiger enthält; es wird kein Konstruktor aufgerufen.
Das folgende Beispiel hilft, das Konzept der Konstruktoren besser zu verstehen:
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
Object is being created Length of line : 6
Parametrisierte Konstruktoren
Der Standardkonstruktor hat keine Parameter, aber falls erforderlich, können Konstruktoren auch Parameter haben. Auf diese Weise werden dem Objekt bei seiner Erstellung Anfangswerte zugewiesen, ohne dass ein separater Aufruf erforderlich istsetFunktionen, wie im folgenden Beispiel gezeigt:
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
Object is being created, length = 10 Length of line : 10 Length of line : 6
Verwenden von Initialisierungslisten zum Initialisieren von Feldern
C++ empfiehlt die Verwendung vonMember-Initialisierungslistezum Initialisieren der Member-Variablen. Ihre Syntax besteht darin, einen Doppelpunkt nach der Parameterliste des Konstruktors anzufügen,:), dann schreibenmember variable name (initial value)。
Im folgenden Beispiel,: length(len)bedeutet: den übergebenen Parameter zu verwendenlenum die Member-Variablen direkt zu initialisierenlength. HinweiscoutAusgegeben wird die Membervariablelength, statt eines Parameterslenwodurch Sie intuitiv überprüfen können, dass die Membervariablen korrekt zugewiesen wurden:
Die obige Syntax entspricht der folgenden Zuweisung im Funktionskörper; beide erzeugen genau dieselbe Ausgabe:
Der Unterschied zwischen den beiden Vorgehensweisen besteht darin, dass die Initialisierungsliste die Initialisierung der Membervariablen abschließt, ehe der Funktionskörper betreten wird,bevorwährend die Zuweisung im Funktionskörper zuerst default-konstruiert und dann zuweist, was ein zusätzlicher Schritt ist. Fürconstconst-Member, Referenz-Member und Objekt-Member ohne Standardkonstruktor ist die Initialisierungsliste dieeinzigeInitialisierungsmethode.
Angenommen, es gibt eine Klasse C mit mehreren Feldern X, Y, Z usw., die initialisiert werden müssen; trennen Sie die verschiedenen Felder einfach durch Kommas, wie unten gezeigt:
Hinweis:Die Initialisierungsreihenfolge der Mitglieder in der Initialisierungsliste wird durch ihre Reihenfolge in der Klasse bestimmt,Deklarationsreihenfolgenicht durch die Reihenfolge, in der sie geschrieben werden. Es wird empfohlen, sie konsistent zu halten, um Verwirrung zu vermeiden.
Klassendestruktor
KlassendestruktorEin Destruktor ist eine spezielle Memberfunktion einer Klasse. Am Ende der Lebensdauer eines Objekts (wenn es den Gültigkeitsbereich verlässt oderdeletegelöscht wird), wird er automatisch ausgeführt, um die vom Objekt belegten Ressourcen freizugeben (z. B. dynamischer Speicher, Dateihandles usw.).
Der Name des Destruktors ist genau derselbe wie der Name der Klasse, außer dass ihm eine Tilde (~) vorangestellt wird~als Präfix. Er gibt keinen Wert zurück, darf keine Parameter haben, und jede Klasse kann nur einen Destruktor haben.
Das folgende Beispiel hilft, das Konzept der Destruktoren besser zu verstehen:
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
Object is being created Length of line : 6 Object is being deletedWeitere Erweiterungen