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

constructor_4.cpp

#include <stdio.h>

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

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(m_i+1) // m_ci のコンストラクト時には m_i はまだ初期化されていないため、m_ci の初期値も不定となる。
    {
        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 ;
}

戻る
トップページへ戻る