C++ のクラスとオブジェクト (3)

1. クラスの 6 つのデフォルトのメンバー関数

クラスにメンバーが存在しない場合、そのクラスは単に空のクラスと呼ばれます。

空のクラスには本当に何もないのでしょうか?いいえ、どのクラスも何も書き込まない場合、コンパイラは次の 6 つのデフォルトのメンバー関数を自動的に生成します。

デフォルトのメンバー関数:ユーザーによる明示的な実装を行わずにコンパイラーによって生成されたメンバー関数は、デフォルトのメンバー関数と呼ばれます。

ここに画像の説明を挿入

2. コンストラクター

2.1. コンセプト(問題の定式化)

以下の Date クラスの場合:
ここに画像の説明を挿入
Date クラスの場合、Init パブリック メソッドでオブジェクトに日付を設定できますが、オブジェクトを作成するたびにこのメソッドを呼び出して情報を設定するのは少し面倒です。オブジェクト作成時に情報を設定 毛織物?

コンストラクターは、クラス名と同じ名前を持つ特別なメンバー関数です。コンストラクターは、クラス型オブジェクトの作成時にコンパイラによって自動的に呼び出され、各データ メンバーが適切な初期値を持つようにし、ライフ サイクル全体で 1 回だけ呼び出されます。オブジェクトの

2.2. 特徴

コンストラクターは特別なメンバー関数です。コンストラクターの名前はコンストラクターと呼ばれていますが、コンストラクターの主なタスクは、オブジェクトを作成するためのスペースを開くことではなく、オブジェクトを初期化することであることに注意してください

次のプロパティがあります。

  1. 関数名はクラス名と同じです。
  2. 戻り値はありません。
  3. コンパイラは、オブジェクトがインスタンス化されるときに、対応するコンストラクターを自動的に呼び出します。
  4. コンストラクターはオーバーロードできます。
    ここに画像の説明を挿入
  5. クラスにコンストラクターの明示的な定義がない場合、C++ コンパイラーはパラメーターなしでデフォルトのコンストラクターを自動的に生成します。ユーザーが定義を定義すると、コンパイラーはそれを生成しなくなります。
    ここに画像の説明を挿入
  6. コンパイラーによって生成されるデフォルトのメンバー関数について: コンストラクターが実装されていない場合、コンパイラーはデフォルトのコンストラクターを生成します。しかし、デフォルトのコンストラクターは役に立たないようです? d オブジェクトは、コンパイラによって生成されたデフォルトのコンストラクターを呼び出します。ただし、d オブジェクト _year、__month、_day は依然としてランダムな値です。つまり、コンパイラによって生成されたデフォルトのコンストラクターはここでは役に立たないということですか??
    回答: C++ では、型を組み込み型 (基本型) とカスタム型に分類します。組み込み型は、int/char... など、言語によって提供されるデータ型です。カスタム型は、class/struct/union などを使用して定義された型です。次のプログラムを見ると、コンパイラがデフォルトのチャネルを生成することがわかります。関数はカスタム型メンバー _t でデフォルトのメンバー関数を呼び出します。
    ここに画像の説明を挿入

注: C++11 では、組み込み型のメンバーが初期化されない、つまりクラスで宣言されたときに組み込み型のメンバー変数にデフォルト値が与えられるという欠陥に対するパッチが適用されました。
ここに画像の説明を挿入

  1. パラメーターなしのコンストラクターとデフォルト コンストラクターは両方ともデフォルト コンストラクターと呼ばれ、デフォルト コンストラクターは 1 つだけです。注: 引数のないコンストラクター、完全なデフォルト コンストラクター、およびデフォルトでコンパイラーによって生成されるように記述されていないコンストラクターはすべて、デフォルト コンストラクターと見なすことができます。これら 3 つのデフォルト コンストラクターのうち、存在するのは 1 つだけです。
    ここに画像の説明を挿入

3. デストラクター

3.1. コンセプト

前のコンストラクターの研究を通じて、オブジェクトがどのようにして誕生し、そのオブジェクトがどのように消滅したのかがわかります。

デストラクター: コンストラクターの機能とは異なり、デストラクターはオブジェクト自体の破棄を完了しません。ローカル オブジェクトの破棄はコンパイラーによって行われます。オブジェクトが破棄されると、自動的にデストラクターが呼び出され、オブジェクト内のリソースのクリーンアップが完了します。

3.2. 特徴

デストラクターは、次のような特性を持つ特別なメンバー関数です。

  1. デストラクター名には、クラス名の前に文字 ~ が付加されます。
  2. パラメータの戻り値の型はありません。
  3. クラスにはデストラクターを 1 つだけ含めることができます。明示的に定義されている場合、システムはデフォルトのデストラクターを自動的に生成します。注: Xigou 関数はオーバーロードできません。
  4. オブジェクトのライフサイクルが終了すると、C++ コンパイル システムは自動的にデストラクターを呼び出します。
    ここに画像の説明を挿入
  5. コンパイラーの自動生成コンストラクターに関して何か対策はされていますか? 次のプログラムでは、コンパイラによって生成されたデフォルトのデストラクターがカスタム型メンバーのデストラクターを呼び出すことがわかります。
    ここに画像の説明を挿入
  6. クラス内にリソース アプリケーションが存在しない場合、デストラクターを記述することはできず、Data クラスなど、コンパイラによって生成されたデフォルトのデストラクターが直接使用されます。リソース アプリケーションがある場合はそれを記述する必要があり、存在しない場合は記述されます。 Stack クラスなどのリソース リークの原因となります。

おすすめ

転載: blog.csdn.net/zxj20041003/article/details/130309020