C++初期化リスト


摘抄:銭能の《C++プログラム設計教程》
一、初期化が必要なデータメンバーがオブジェクトである場合.
二、const修飾のクラスメンバーを初期化する必要がある.
三、参照メンバーデータを初期化する必要がある.
四、初期化の順番に違いがあることに注意してください.上から下へ、左から右へ.

class point
{
private:
    int x,y;
public:
    point(int m=0,int n=0):x(m),y(n)
    {
        x=m;
        y=n;
    }
    ……
};

一、初期化が必要なデータメンバーがオブジェクトである場合.


class AAA
{
private:
    int aa;

public://     
    AAA(int i):aa(i){}

//public://    
//    AAA(int i)
//    {
//        aa = i;
//    }
};


class BBB
{
private:
    AAA oo;

public:
    BBB(int i):oo(i) { }
};


二、const修飾のクラスメンバーを初期化する必要がある.三、参照メンバーデータを初期化する必要がある.
定数(const)は付与できないからです.
参照も再割り当てできません.


class Test
{
private:
    const int boy;
    int& girl;

public:
    Test(int i, int& j):boy(i), girl(j) { }
};


テスト

#include <iostream>
using namespace std;

class TestInit
{
    int aa;
    int bb;
public:
//     :     ,     ,     aa = 0 bb = 0

//     :       ,    ,    aa = 2147348480 bb = 30089830
//    TestInit( ){}

//     :       , a b,      aa = -1 bb = -1
//    TestInit( ):aa(-1), bb(aa) {}    

//     :  ,   b a,            aa = 30089830 bb = -1
//    TestInit( ):bb(-1), aa(bb) {}     

    void print() 
    { 
        cout<<"aa = "<<aa<<" bb = "<<bb<<endl; 
    }
};

int main()
{
    TestInit( ).print();
    return 0;
}