C 建構函式中引數初始化表與函式體賦值的區別

2022-07-18 11:15:12 字數 485 閱讀 1022

一、 使用引數初始化表並沒有效率上的優勢,僅僅是書寫方便。

引數初始化表還有乙個很重要的作用,那就是初始化 const 成員變數。初始化 const 成員變數的唯一方法就是使用引數初始化表。例如 vs/vc 不支援變長陣列(陣列長度不能是變數),我們自己定義了乙個 vla 類,用於模擬變長陣列,請看下面的**:

class

vla;

//必須使用引數初始化表來初始化 m_len

vla::vla(int

len): m_len(len)

vla 類包含了兩個成員變數,m_len 和 m_arr 指標,需要注意的是 m_len 加了 const 修飾,只能使用引數初始化表的方式賦值,如果寫作下面的形式是錯誤的:

class

vla;

vla::vla(

intlen)

建構函式 引數初始化列表

建立類物件時會自動呼叫建構函式 建構函式不需且不能手動呼叫 預設建構函式 在建立物件時不必給出實參的建構函式。包括無參建構函式和全部引數都有預設值的建構函式。如果使用者沒有定義建構函式,則系統會自動提供乙個預設建構函式,即上述的無參建構函式,函式體為空。當給類中的私有常量定義時,必須通過引數初始化列...

建構函式中引數初始化表與函式體賦值的區別

1 常資料成員只能通過建構函式初始化表對其進行初始化 常資料成員只能通過建構函式初始化表對其進行初始化,任何其它函式都不能對常資料成員賦值。如類體中定義了常資料成員hour constint hour 定義hour為常資料成員 不能採用在建構函式中對常資料成員賦值的方法,下面的用法是非法的 time...

(C )建構函式初始化

vc 中的對於類的定義是有很大的不同。例如在.net程式中對於需要初始化的引數可以直接的賦值,而在vc 中對於需要初始化的引數則需要使用不同的方法。例如對於char字元則需要使用strcpy s函式賦值而相反對於布林型別 bool 整數型別 int 則可以使用運算子 對其初始化。1.定義乙個帶有引數...