c 建構函式和型別轉換

2021-06-22 02:41:02 字數 1428 閱讀 1888

建構函式constructor和型別轉換

1. 構造函式呼叫的時候只帶乙個引數時(引數列表為乙個引數或者多個引數帶有預設引數),才可以執行自動轉換。即該建構函式的引數型別可以自動轉換成該類型別。

object(const char *name=null, int otype=0); // char * 可以自動轉換成 object型別

object(int param);      // int 可以自動轉換成object.

2. 建構函式只允許一次自動轉換,不允許連續兩次或者多次自動轉換, 如例1。

3. explicit 修飾的建構函式(僅限呼叫時只帶乙個引數的建構函式才有意義),不允許程式呼叫該建構函式執行自動型別轉換。如例1和例2的對比。

4. explicit 修飾的建構函式,僅允許direct initialization(相當於explicit 呼叫constructor),不允許copy initialization(相當於implicit 呼叫constructor)。如例2.

class abc

abc::abc(int a)

例子1:普通constructor

class

foo

void

output(

void

)

private

:

std::

string

m_string

;};

void

func(

fooa)

int

main()

例子2:explicit constructor

class

foo

void

output(

void

)

private

:

std::

string

m_string

;};

void

func(

fooa)

int

main()

參考文獻

c++ primer 5th

c 型別轉換建構函式

定義轉換建構函式的目的是實現型別的自動轉換。只有乙個引數,而且不是複製建構函式的建構函式,一般 就可以看作是轉換建構函式。當需要的時候,編譯系統會自動呼叫轉換建構函式,建立 乙個無名的臨時物件 或臨時變數 include using namespace std class complex compl...

C 轉換建構函式和轉換函式

1 轉換建構函式的作用 作用 將某種型別轉換為類型別 例如有下面的 base int a 轉換建構函式 base b 物件 b 12 解析 程式將使用建構函式base int a 構造出乙個臨時的無名base物件,並用12對其初始化。然後採用逐個成員賦值的方式將該臨時物件的內容賦值給物件b。這一過程...

型別轉換函式 轉換建構函式

用途 將乙個其它型別的資料轉換成自定義的類型別。注意 這種建構函式只有乙個引數,但要區別於拷貝建構函式 形參是乙個自定義型別的引用 例子 include using namespace std class complex 這個預設的建構函式便可以充當 轉換建構函式 complex double r ...