類物件的構造順序是這樣的:
1.分配記憶體,呼叫建構函式時,隱式/顯示的初始化各資料成員
初始化階段可以是顯式的或隱式的,取決於是否存在成員初始化表。隱式初始化階段按照宣告的順序依次呼叫所有基類的預設建構函式,然後是所有成員類物件的預設建構函式。
2.進入建構函式後在建構函式中執行一般計算
計算階段由建構函式體內的所有語句構成。在計算階段中,資料成員的設定被認為是賦值,而不是初始化。
使用初始化列表有兩個原因:
1.必須這樣做:
三種情況下需要使用初始化成員列表:
一,物件成員;
二,const修飾的成員;
三,引用成員資料;
(1)如果有乙個類成員,它本身是乙個類或者是乙個結構,而且這個成員它只有乙個帶引數的建構函式,而沒有預設建構函式,這時要對這個類成員進行初始化,就必須呼叫這個類成員的帶引數的建構函式,如果沒有初始化列表,那麼他將無法完成第一步,就會報錯。
(2)當類成員中含有乙個const成員時
(3)當類成員中含有乙個引用時
結果:2.效率要求這樣做:
類物件的構造順序顯示,進入建構函式體後,進行的是計算,是對他們的賦值操作,顯然,賦值和初始化是不同的,這樣就體現出了效率差異,如果不用成員初始化列表,那麼類對自己的類成員分別進行的是一次隱式的預設建構函式的呼叫,和一次複製操作符的呼叫,如果是類物件,這樣做效率就得不到保障。
注意:建構函式需要初始化的資料成員,不論是否顯式的出現在建構函式的成員初始化列表中,都會在該處完成初始化,並且初始化的順序和其在宣告時的順序是一致的,與列表的先後順序無關,所以要特別注意,保證兩者順序一致才能真正保證其效率。
成員初始化列表
任乙個物件的建立都要呼叫建構函式,而在建構函式中一般要給物件屬性賦值。成員初始化列表 member initialize list 是建構函式中特有的語法,用以簡化對物件屬性的賦值。其用法如下 class myclass 以上 相當於 class myclass 用成員初始化列表的語法來表述很顯然 ...
成員初始化列表
從概念上講,可以認為建構函式分兩個階段執行 1 初始化階段 2 普通的計算階段。計算階段由建構函式函式體中的所有語句組成。不管成員是否在建構函式初始化列表中顯式初始化,類型別的資料成員總是在初始化階段初始化。初始化發生在計算階段開始之前。在建構函式初始化列表中沒有顯式提及的每個成員,使用與初始化變數...
成員初始化列表
1 對於const資料成員,必須在執行到建構函式體之前,即建立物件時進行初始經。2 成員初始經列表由逗號分隔的初始化列表組成 前面帶冒號 它位於引數列表的右括號之後 函式體左括號之前。3 初值可以是常量或建構函式的引數列表中的引數。這種方法並不限於初始化常量。例如下 queue queue int ...