C ++のコンストラクタとデストラクタ

コンストラクタとデストラクタは、これら2つの関数はコンパイラになり 、自動的にコンストラクタ呼び出し、 完全なオブジェクトの 初期化アクションを、デストラクタは、 オブジェクトの最後に終了した クリーンアップ
注:初期化とクリーンアップの対象は、コンパイラで 強制的に 、行うために私たちを あなたが初期化とクリーンアップ操作を提供していない場合でも 、コンパイラはあなたが増加与える デフォルトのアクションを 、しかし 、デフォルトの初期化動作は何もしません
コンストラクタ:オブジェクトのインスタンスを作成する場合、システムが自動的に呼び出し
デストラクタ:オブジェクト呼び出し自動的に解放
 

コンストラクタの構文:

コンストラクタとクラス名が同じ、ノーリターンタイプではない、でも無効となりますが、パラメータがあるかもしれない、オーバーロードできません

デストラクタ構文:

デストラクタ関数名はクラス名に先行される「 - 」、ノーリターンタイプではなく、さらに空缶が過負荷にすることができない、パラメータを持っていません

1  クラスのデータ
 2  {
 3。 公共4      INT NUM;
 5。 公共6      // コンストラクタ(引数なしコンストラクタ)
。7      データ()
 8      {
 9。          NUM = 0 ;
 10          COUT << " 引数なしのコンストラクタ" << ENDL;
 11      }
 12は     、// (構造に関して)コンストラクタ
13は      、データ(INT N-)
 14      {
 15          NUM = N-;
 16          COUT <<" そこコンストラクタパラメータ" << ENDL;
 17      }
 18である 
。19      // デストラクタ
20はデータ()
 21は     、{
 22は          COUT << " デストラクタ" << ; ENDL
 23である     }
 24  
25  };
 26である ボイドTEST01( )
 27  {
 28      // クラスのインスタンスオブジェクトのコンストラクタが呼び出されるカスタム・システム
29      、データOB
 30      
31である     。// オブジェクトOBがローカルに自動的に解放デストラクタコールされたとき、関数終了
32  }
 33が INTメイン(int型 ARGCをCHAR * ARGV [])
 34  {
 35      COUT << " ----- 001 ----- " << ENDL。
36      TEST01()。
37      COUT << " ------ 002 ------- " << ENDL。
38      リターン 0 ;
39 }
1、コンストラクタの分類:
パラメトリックタイプ:分割と引数のコンストラクタの引数のコンストラクタを持っていません
分類:一般的なコンストラクタとコピーコンストラクタ(コピーコンストラクタ)
2、コンストラクタを呼び出します
クラスデータ
{ 
パブリックint型NUM;
 公共// (引数なしのコンストラクタ)コンストラクタ
    データ()
    { 
        NUM = 0 ; 
        COUT << " 引数なしのコンストラクタ= NUM " << NUM << ENDL; 
    } 
    // (構造に関して)コンストラクタ 
    データ(INT N-)
    { 
        NUM = N-; 
        COUT << " がコンストラクタパラメータ= NUM " << NUM << ENDL; 
    } 

    // デストラクタ(戻り値型パラメータはません。オーバーロードできません)データ()
    { 
        COUT << " デストラクタ= NUM " << NUM << ENDL; 
    } 

}; 
ボイドTEST02()
{ 
    // デフォルトの設定パラメータへの呼び出し、または(暗黙的な呼び出し)することなく
    データOB1;
     // コール参照なし構成(表示コール) 
    データOB2 = データ(); 

    // コールは、設定パラメータ(暗黙的な呼び出し)を有する 
    データOB3(10 );
     // 呼び出しパラメータを設定した(コールを示す) 
    データOB4 =データ(20である); 

    //は暗黙(一つだけのデータメンバに固有の)呼び出し変換パラメータの設定に方法があります(使用しないようにしてください) 
    データOB5 = 30 ; //は、(30)データOB5に変換

    // (現在の文が直ちに解放は匿名オブジェクトを終了)匿名オブジェクト
    データ(40 ); 
    coutの << ------  << てendl; 
    
    // DOは、それが道に引数なしでコンストラクタを呼び出しません
    
}

注:コンストラクタとデストラクタの同じ範囲の逆の順序

図3に示すように、コピーコンストラクタ(システムは、コピーコンストラクタの割り当てを提供します)

1  空隙TEST03()
 2  {
 3。      データOB1(10 。4      COUT << " ob1.num = " << ob1.num << ENDL;
 5  
。6      // ユーザはコピーのシステム構成を実現していない場合(コピーコンストラクタを呼び出しますデフォルトのコピーコンストラクタを呼び出す)
 7      // シンプルな全体の割り当て(浅いコピー):デフォルトのコピーコンストラクタ
 8      // ユーザシステムは、ユーザのコピーを達成するために構成されている場合はコピーコンストラクタを実装呼び出す
9。 
10      データOB2(OB1); // 暗黙の呼び出しコピーコンストラクタ
11。      COUT << " ob2.num = " << ob2.num << ENDL;
 12は、 
13である      データOB3データ=(OB1)。// 表示コピーコンストラクタを呼び出します
14      COUT << " ob3.num = " << ob3.num << ENDL。
15  
16      データOB4 = OB1。// =隐式转换调用
17      はcout << " ob4.num = " << ob4.num << てendl;
18 }

 

おすすめ

転載: www.cnblogs.com/loliconinvincible/p/12521004.html