Notice : 内容無保証。禁無断転載。リンク自由。

constructor_5.cpp

#include <stdio.h>

// コンストラクタ (5)
// クラスメンバのコンストラクトの順序 -2

class Cint {
    int    m_x ;

public:
    Cint(
        int x=0
    ){
        printf(" Cint::Cint(%d)\n", x) ;
        m_x = x ;
    }

    int    get(void) {return m_x ;}
} ;

class C {
    Cint    m_ci ;
    int        m_i ;

public:
    C(
        int i=0
    ):
        m_i(i),     // m_i を先に初期化するつもりでこう書いても、メンバの初期化は宣言順に行われる。
        m_ci(i+1)   // 初期化は他のメンバの値に依存しないような方法で行う。
    {
        printf("C::C(%d)\n", i) ;
    }

    void show(char* msg=""){
        printf("%s(%d,%d)\n", msg, m_ci.get(), m_i) ;
    }
} ;

int main(void){
    C   a(1) ;

    a.show("a=") ;

    return 0 ;
}

戻る
トップページへ戻る