[C++] Vom Einstieg zur Beherrschung Teil 2 – Klassenkonstruktoren und -destruktoren

Geben Sie hier den Titel des Verzeichnisses ein

Vorn geschrieben
– Der Konstruktor und der Destruktor sind zwei spezielle Mitgliedsfunktionen, die beide keinen Rückgabewert haben. Der Name des Konstruktors ist derselbe wie der Name von Die Klasse und der Destruktor Der Name wird einfach ~
vor dem Klassennamen hinzugefügt. Der Konstruktor wird hauptsächlich verwendet, um den Datenelementen im Objekt beim Erstellen des Objekts Werte zuzuweisen. Der Hauptteil Der Zweck besteht darin, das Objekt zu initialisieren.
Analyse Die Funktion des Konstruktors ist genau das Gegenteil des Konstruktors. Der Destruktor wird verwendet, um das Objekt freizugeben und zu bereinigen, bevor das Objekt gelöscht wird.

Klassenkonstruktor

Wenn ein Objekt einer Klasse erstellt wird, wird standardmäßig der Konstruktor aufgerufen. Wenn der Benutzer keinen Konstruktor bereitstellt, implementiert der Compiler automatisch einen leeren Konstruktor. Daher besteht die Hauptfunktion des Konstruktors darin, einige Initialisierungsarbeiten abzuschließen. Im Allgemeinen beispielsweise das Festlegen von Attributoperationen für Klassenmitglieder, das Zuweisen von Werten zu Mitgliedsdaten usw.

Implementierung der Konstruktorklasse

  1 #include<iostream>
  2 using namespace std;
  3 class Person
  4 {
    
    
  5     public:
  6         Person(int age, int height)
  7         {
    
    
  8             this->age = age;
  9             this->height = height;
 10         };
 11         void show()
 12         {
    
    
 13             cout<<"age = "<<age<<endl;
 14             cout<<"height = "<<height<<endl;
 15         }
 16     private:
 17         int age;
 18         int height;
 19 
 20 
 21 };
 22 
 23 
 24 int main()
 25 {
    
    
 26     Person p(45,123);
 27     p.show();
 28     
 29     return 0;
 30 }
~      

Out-of-Class-Implementierung:

  1 #include<iostream>
  2 using namespace std;
  3 class Person
  4 {
    
    
  5     public:
  6 /*        Person(int age, int height)
  7         {
  8             this->age = age;
  9             this->height = height;
 10         };*/
 11         Person(int age,int height);//注意一定要在类内先声明
 12         void show()
 13         {
    
    
 14             cout<<"age = "<<age<<endl;
 15             cout<<"height = "<<height<<endl;
 16         }
 17     private:
 18         int age;
 19         int height;
 20 
 21 
 22 };
 23 Person::Person(int age,int height)
 24 {
    
    
 25 
 26      this->age = age;
 27      this->height = height;
 28 }
 29 
 30 
 31 int main()
 32 {
    
    
 33     Person p(45,123);
 34     p.show();
 35 
 36     return 0;
 37 }

Konstruktor kopieren

  1 #include<iostream>
  2 using namespace std;
  3 class Person
  4 {
    
    
  5     public:
  6 /*        Person(int age, int height)
  7         {
  8             this->age = age;
  9             this->height = height;
 10         };*/
 11         Person(int age,int height);//注意一定要在类内先声明
 			Person::Person(Person &pp);//复制构造函数
 12         void show()
 13         {
    
    
 14             cout<<"age = "<<age<<endl;
 15             cout<<"height = "<<height<<endl;
 16         }
 17     private:
 18         int age;
 19         int height;
 20 
 21 
 22 };
 23 Person::Person(int age,int height)
 24 {
    
    
 25 
 26      this->age = age;
 27      this->height = height;
 28 }
 29 Person::Person(Person &pp)
 30 {
    
    
      this->age = pp.age;
 	  this->height = pp.height;	
 
 	}
 int main()
  {
    
    
      Person p(45,123);
      p.show();
  	  Person pp(p);
  	  pp.show();
      return 0;
  }

Hinweis: Wenn der Benutzer vergisst, den deklarierten Standardkonstruktor anzuzeigen, führt dies zu einem Linkfehler. Wenn wir also einen benutzerdefinierten Standardkonstruktor verwenden, muss dieser implementiert werden, auch wenn es sich um eine leere Implementierung handelt.

Klassenzerstörer

  1 #include<iostream>
  2 #include<string.h>
  3 using namespace std;
  4 class Person
  5 {
    
    
  6     public:
  7         Person();
  8         ~Person();
  9         void show();
 10         char* message;
 11 };
 12 Person::Person()
 13 {
    
    
 14 
 15     message = new char[1024];
 16 }
 17 void Person::show()
 18 {
    
    
 19     strcpy(message,"fsvfg");
 20 
 21     cout<<"message = "<<message<<endl;
 22 }
 23 Person::~Person()
 24 {
    
    
 25     delete []message;
 26 }
 27 int main()
 28 {
    
    
 29     Person p;
 30     p.show();
 31 
 32     return 0;
 33 }
 34 

Hinweis:
In einer Klasse kann nur ein Destruktor vorkommen
Destruktoren können nicht überladen werden
Weder der Konstruktor noch Der Destruktor kann die Return-Anweisung verwenden, es gibt keinen Rückgabewert

Die Regeln zum Aufrufen von Konstruktoren und Destruktoren in verschiedenen Umgebungen lauten wie folgt:

Der Umfang automatischer Variablen ist ein bestimmtes Modul. Wenn dieses Modul aktiviert ist, wird der Konstruktor aufgerufen. Wenn das Modul beendet wird, wird der Destruktor aufgerufen.

Globale Variablen rufen den Konstruktor auf, bevor sie in die Hauptfunktion eintreten, und den Destruktor, wenn das Programm beendet wird.

Dynamisch zugewiesene Objekte rufen den Konstruktor auf, wenn new zum Zuweisen von Speicher für das Objekt verwendet wird, und der Destruktor wird aufgerufen, wenn delete zum Löschen des Objekts verwendet wird.

Temporäre Variablen werden vom Compiler automatisch generiert, um Berechnungen zu unterstützen. Die Start- und Endpunkte der Lebensdauer der temporären Variablen rufen den Konstruktor und Destruktor auf.

Supongo que te gusta

Origin blog.csdn.net/2202_75623950/article/details/134275244
Recomendado
Clasificación