1. 類成員為const類型
2. 類成員為引用類型
#include <iostream>using namespace std;class A{ public: A(int &v) : i(v), p(v), j(v) {} void PRint_val() { cout << "hello:" << i << " " << j << endl;} private: const int i; int p; int &j;};int main(int argc ,char **argv){ int pp = 45; A b(pp); b.print_val();}究其因
const對(duì)象或引用只能初始化但是不能賦值。構(gòu)造函數(shù)的函數(shù)體內(nèi)只能做賦值而不是初始化,因此初始化const對(duì)象或引用的唯一機(jī)會(huì)是構(gòu)造函數(shù)函數(shù)體之前的初始化列表中。
從無(wú)到有叫初始化,初始化(調(diào)用拷貝構(gòu)造函數(shù))創(chuàng)建了新對(duì)象;賦值(調(diào)用賦值操作符)沒(méi)有創(chuàng)建新對(duì)象,而是對(duì)已有的對(duì)象賦值。
3. 類成員為沒(méi)有默認(rèn)構(gòu)造函數(shù)的類類型
#include <iostream>using namespace std;class Base{ public: Base(int a) : val(a) {} private: int val;};class A{ public: A(int v) : p(v), b(v) {} void print_val() { cout << "hello:" << p << endl;} private: int p; Base b;};int main(int argc ,char **argv){ int pp = 45; A b(pp); b.print_val();}原因同樣是創(chuàng)建對(duì)象時(shí),要初始類成員的每一個(gè)成員
4. 如果類存在繼承關(guān)系,派生類必須在其初始化列表中調(diào)用基類的構(gòu)造函數(shù)
#include <iostream>using namespace std;class Base{ public: Base(int a) : val(a) {} private: int val;};class A : public Base{ public: A(int v) : p(v), Base(v) {} void print_val() { cout << "hello:" << p << endl;} private: int p;};int main(int argc ,char **argv){ int pp = 45; A b(pp); b.print_val();}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注