關於型別轉換建構函式的疑惑點

2022-01-24 03:06:30 字數 811 閱讀 8313

#include

using

namespace std;

// 乙個類,有乙個成員val

class

a//解答關鍵點

a&getobj()

/* 函式一:

a& operator=(int x)

函式二:

a& operator=(const a y)

*/};int

main()

return0;

}

這道題目的疑惑點如上述:為什麼可以將乙個int型的數賦值給乙個類型別的引用?

問題的關鍵就在於我所寫的建構函式:

a

(int x=

123)

:val

(x)//解答關鍵點

這個建構函式非常的特殊,因為它可以起3個作用:

這個建構函式的第三個作用便是這道題目的答案所在:

當編譯器執行到:

a.

getobj()

= m;

這條語句時,發現左邊為a型別的引用,而右邊為乙個int型的變數,此時它便會去找能否將乙個int型變數轉換為a型別物件的轉換建構函式。而:

a

(int x=

123)

:val

(x)

這個函式可以做到這一點。於是,編譯器首先將等號右邊的int型變數轉換為a型別的臨時變數。再將這個這個變數賦值到左邊。因此這條語句能夠通過編譯。

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

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

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

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

型別轉換建構函式

include stdafx.h include using namespace std include 用型別轉換建構函式進行型別轉換 class point2d friend class point3d 設定友元類 private int x int y class point3d if 0 我...