[C++] 入門から習得まで パート 2 - クラスのコンストラクターとデストラクター

ここにディレクトリのタイトルを書きます

先頭に記述
- コンストラクターとデストラクターは 2 つの特別なメンバー関数であり、どちらも戻り値がありません。コンストラクターの名前は、コンストラクターの名前と同じです。クラス、およびデストラクター 名前はクラス名の前に ~
が追加されるだけです コンストラクターは主に、オブジェクトの作成時にオブジェクト内のデータ メンバーに値を割り当てるために使用されます。目的はオブジェクトを初期化することです。
分析 コンストラクターの機能はコンストラクターの逆です。デストラクターは、オブジェクトを削除する前にオブジェクトを解放し、オブジェクトをクリーンアップするために使用されます。

クラスコンストラクター

クラスのオブジェクトが作成されると、デフォルトでコンストラクターが呼び出されます。ユーザーがコンストラクターを指定しない場合、コンパイラーは自動的に空のコンストラクターを実装します。したがって、コンストラクターの主な機能は、クラス メンバーの属性操作の設定、メンバー データへの値の割り当てなどの初期化作業を完了することです。

コンストラクタークラスの実装

  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 }
~      

クラス外の実装:

  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 }

コピーコンストラクター

  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;
  }

注: ユーザーが宣言されたデフォルト コンストラクターを表示するのを忘れた場合、リンク エラーが発生するため、カスタムのデフォルト コンストラクターを使用する場合は、それが空の実装であっても実装する必要があります。

クラスデストラクタ

  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 

注:
クラス内に使用できるデストラクターは 1 つだけです。
デストラクターはオーバーロードできません。
コンストラクターもオーバーロードもできませんデストラクターは return ステートメントを使用できますが、戻り値はありません

さまざまな環境でコンストラクターとデストラクターを呼び出すためのルールは次のとおりです。

自動変数のスコープはあるモジュールであり、このモジュールが起動されるとコンストラクタが呼び出され、モジュールが終了する場合はデストラクタが呼び出されます。

グローバル変数は、main 関数に入る前にコンストラクターを呼び出し、プログラムの終了時にデストラクターを呼び出します。

動的に割り当てられたオブジェクトは、new を使用してオブジェクトにメモリを割り当てるときにコンストラクターを呼び出し、delete を使用してオブジェクトを削除するときにデストラクターを呼び出します。

一時変数は計算をサポートするためにコンパイラによって自動的に生成され、一時変数の有効期間の開始点と終了点でコンストラクタとデストラクタが呼び出されます。

おすすめ

転載: blog.csdn.net/2202_75623950/article/details/134275244
おすすめ