#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 我...