3-21(クラスとオブジェクトの補足)

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

クラスにメンバーがいない場合は、略して空のクラスと呼ばれます。空のクラスには何もありませんが、6つのデフォルト関数が自動的に生成されます。



コンストラクタ:

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

特性:

コンストラクターは特別なメンバー関数であり、主なタスクはオブジェクトを作成するためにスペースを開くことではなく、オブジェクトを初期化することです。

関数名はクラス名と同じです。

戻り値なし。

オブジェクトがインスタンス化れると、コンパイラは対応するコンストラクタを自動的に呼び出します

コンストラクターはオーバーロードできます。

クラスにコンストラクターの定義が表示されない場合、c ++コンパイラーはパラメーターなしのデフォルトコンストラクターを自動的に生成します。

パラメーターのないコンストラクター、完全なデフォルトコンストラクター、およびコンパイラーによってデフォルトで生成されるコンストラクターはすべてデフォルトコンストラクターと呼ばれ、デフォルトコンストラクターは1つしか存在できません

コンパイラーによって生成されたデフォルトのコンストラクターは、組み込み型変数をランダムな値に初期化しカスタム型メンバーのデフォルトのメンバー関数を呼び出します。



デストラクタ:

コンストラクターとは異なり、彼の主なタスクは、クラスのリソースの一部をクリーンアップすることです。

特性:

デストラクタの名前の前には文字〜が付いています。

パラメータも戻り値もありません

クラスには1つだけのデストラクタがあります。定義が表示されない場合、コンパイラはデフォルトのデストラクタを自動的に生成します。

オブジェクトのライフサイクルが終了すると、C ++コンパイルシステムは自動的にデストラクタを呼び出します。

コンパイラによって生成されたデストラクタは、カスタムタイプのメンバーに対してそのデストラクタ呼び出します





コピーコンストラクター:

単一のパラメーターのみ、パラメーターはオブジェクト参照のクラスのタイプ(通常はconstによって変更されます)であり、新しいオブジェクトを作成するときに既存のオブジェクトクラスタイプがコンパイラーによって自動的に呼び出されます。


特性:

コピー関数は、コンストラクターのオーバーロードされた形式です。コンストラクターはパラメーターを介して変数を渡し、コピーコンストラクターはオブジェクトを渡します。

コピーコンストラクターにはパラメーターが1つしかないため、参照渡す必要があります値で渡すと、無限の再帰呼び出し発生します。

定義されたコンストラクターが表示されない場合、システムはデフォルトコンストラクターを生成し、デフォルトのコピーコンストラクターオブジェクトは、シャローコピーと呼ばれるメモリストレージに従ってバイト順にコピーさます。

浅いコピーでは、デストラクタが同じアドレスブロックを2回解放します。



代入演算子のオーバーロード

演算子のオーバーロード:

C ++では、コードの可読性を高めるために演算子のオーバーロードが導入されています。演算子のオーバーロードは、特別な関数名を持つ関数です。

関数名は次のとおりです。演算子の直後にオーバーロードする必要がある演算子シンボル。

関数プロトタイプ:戻り値型演算子演算子(パラメーターリスト)

:オーバーロードされた演算子には、列挙型オペランドの型またはクラスが必要です。

組み込み型に使用される演算子の意味は変更できません。

クラスメンバーのオーバーロードされた関数として、その仮パラメーターは操作の数より1少ないように見えます。これは、メンバー関数演算子にデフォルトの仮パラメーターthisがあり、これは最初の仮パラメーターに制限されているためです。(つまり、クラスメンバー関数を呼び出すと、このポインターは非表示になり、呼び出し元を指します)。

注:。* :: sizeof?:。これらの5つの演算子はオーバーロードできません。


代入演算子のオーバーロード:

戻り値は参照によって返されます。

返されるのは* thisです

定義が表示されない場合、コンパイラーは定義を生成し、完成したオブジェクトはエンディアンコピーさます










c ++がカスタム型である限り、演算子を使用する場合は、演算子をオーバーロードする必要があります。


おすすめ

転載: blog.51cto.com/15085121/2667863