初始化列表:通常使用初始化是為了提高效率,它直接調(diào)用與實參匹配的構(gòu)造函數(shù)。【因為一般在構(gòu)造函數(shù)體內(nèi)的復(fù)制也經(jīng)過初始化-->計算賦值(此時會調(diào)用復(fù)制構(gòu)造函數(shù))兩個階段】;特別的有些時候只能用初始化列表,即不能賦值的參數(shù),如:const或引用類型的成員,沒有默認構(gòu)造函數(shù)的類類型成員。初始化列表中變量的初始化順序是先聲明的先初始化.
class cl1{ private: const int ci; int &ri;}; //ci,ri只能在初始化列表中進行初始化。
默認構(gòu)造函數(shù):全部形參是默認實參的構(gòu)造函數(shù)也是默認構(gòu)造函數(shù)。
只要自己定義了(任意的)構(gòu)造函數(shù),編譯器就不會為我們合成默認構(gòu)造函數(shù)。
復(fù)制構(gòu)造函數(shù):單個形參為本類類型對象的引用的構(gòu)造函數(shù)。對于不支持復(fù)制的類型(如IO類型)不能用復(fù)制構(gòu)造函數(shù)。如果自己定義了復(fù)制構(gòu)造函數(shù)(而不是構(gòu)造函數(shù),即:只定義構(gòu)造函數(shù),但沒有定義復(fù)制構(gòu)造函數(shù),則編譯器合成復(fù)制構(gòu)造函數(shù)),則編譯器不會合成復(fù)制構(gòu)造函數(shù)。【復(fù)制構(gòu)造函數(shù)需要特別注意指針成員,以后將說明】
ifstream file1("filename1"); //ok, direct initialization.
ifstream file2="filename2"; //error
如何防止復(fù)制:可以通過將復(fù)制構(gòu)造函數(shù)聲明為private來禁止普通函數(shù)(非成員,非友元函數(shù))的訪問;可以通過聲明一個private復(fù)制構(gòu)造函數(shù)而不對其定義來禁止成員函數(shù)和友元函數(shù)的訪問。

文章來源:http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!254.entry