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

constructor_1.cpp

#include <stdio.h>

// コンストラクタ (1)
// クラスメンバのコンストラクトと初期化が分離してしまう例

class Cint {
    int    m_x ;

public:
    Cint(){
        printf(" Cint::Cint() : default constructor.\n") ;
        m_x = 0 ;
    }

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

    void set(int x) {m_x = x ;}
    int    get(void) {return m_x ;}
} ;

class C {
    Cint    m_ci ;  // コンストラクタを持つクラスメンバ
    int        m_i ;   // コンストラクタを持たないクラスメンバ

public:
    C(
        int ci=0,
        int i=0
    ){
        // ここにきた時にはすでにメンバm_ciは、デフォルトコンストラクタによってコンストラクト済み

        printf("C::C(%d,%d)\n", ci, i) ;

        m_ci.set(ci) ;  // メンバ m_ci の初期化。
        m_i = i ;
    }

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

int main(void){
    C   a ;
    C   b(1,2) ;
    C   c = 3 ;

    a.show("a=") ;
    b.show("b=") ;
    c.show("c=") ;

    return 0 ;
}

戻る
トップページへ戻る