為什麼子類的初始化列表不能初始化父類的成員

2022-07-19 11:33:17 字數 710 閱讀 4131

...

class rectangle

rectangle(int x, int y) :a(x), b(y){}

public:

int a;

int b;

};class square :public rectangle

};...

error c2614: 「square」: 非法的成員初始化:「a」不是基或成員
...

square(int x)

...

子類:來來來,父類,你先構造

父類:好,我的成員a和b還沒定義,那就用初始化列表(int a=0,int b=0)來初始化,構造完畢。

子類:輪到我構造了,我的成員裡沒有a,我也用的是初始化列表(int a=x),所以我也來int a=x,咦,好像不對,我的成員裡沒有a啊?(可是如果父類裡a我繼承的話,為什麼主人要用初始化列表(int a=x)再來定義一次a呢?)

子類:來來來,父類,你先構造

父類:好,我的成員a和b還沒定義,那就用初始化列表(int a=0,int b=0)來初始化,構造完畢。

子類:輪到我構造了,我用的是賦值初始化(a=x),當然也要先看下有沒有a,正好有(從父類繼承的),執行a=x,初始化好了。

為什麼子類的初始化列表不能初始化父類的成員

class rectangle rectangle int x,int y a x b y public int a int b class square public rectangle error c2614 square 非法的成員初始化 a 不是基或成員.square int x 子類 來來...

初始化 1 預設初始化 列表初始化

初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...

C 為什麼需要成員初始化列表

將建構函式分為兩個階段的執行過程 初始化階段和建構函式函式體階段。既然稱它為成員初始化列表,那麼該階段在初始化階段完成。那麼類成員變數不外乎類型別和非類型別。而對於非類型別而言,此時 無論是在初始化表中還是函式體內完成賦值效果是一致的,即並未初始化。表現的有點不同的是類型別 test1 includ...