C++_コンストラクタに引数を渡して初期化

分からずに書いてるので調べた。

 

Hoge クラスのメンバ変数( 定数 ) _id 引数 i で初期化

    Hoge::HOge( int i ) : _id ( i )
    {

メンバが複数ある場合はコンマ , で区切る

 

ex )

    //Hoge.h
    const int fuga;
   
    //001
    //Hoge.cpp
    Hoge::Hoge( int getId )
    {
        fuga = getID;
        //これはコンパイルエラー。i は const で定数だから。
    }
   
    //002
    //Hoge.cpp
    Hoge::Hoge( int getId ) : fuga( getID )
    {
        //これは OK 
    }
   
    //複数初期化したい時は
    Hoge::Hoge( int getId, int getNum ) : fuga( getID ), piyo( getNum )

 

参照の初期化、コンストラクタの呼び出しも上と同様に記述する。

    Hoge::Hoge( int& i, int id ) : _id( i ), fuga( id )
    {

オブジェクトをメンバに持つことをコンポジション ( 内包 ) という。

 


初期化の順は、初期化リスト i(xxx), j(yyy) の順ではなく、
メンバ変数を宣言した順番に初期化される。
宣言が
    T j;
    T i;
なら j 、i の順に初期化。

 

 

こちらから。
http://www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02022.html
https://qiita.com/tyanmahou/items/c8f69a1a23d2f7669cfc

 

以上。

 

===Memo===

値オブジェクト

C++/CLIネイティブの関数を呼ぶ時、クラスを new して -> で使っているが、
クラスを値型として生成することも可
値型だから前の処理が残らず上書きされる ( イメージ )
何を引数で渡して繰り返し処理したい時に便利。

    auto hoge = new Hoge(10);
    hoge->hhh();
    delete hoge;
    auto hoge2 = new Hoge(100);
    :
    // for 文とかで繰り返し

↑ より ↓ のコードがすっきり。

 

値型で生成
C++/CLI

    Hoge hoge(10);
    Hoge hoge(100);
    hoge.hhh();

 

C++

    Hoge::Hoge(int i) : _getId(i)
    {
    }
    void Hoge::hhh()
    {
        auto a = 10 * getId_;
    }