1、問題
我們上一課的內容是將普通型別轉換成類型別,那麼問題來了,我們能否將類型別轉換到普通型別?
單純這樣肯定是不行的,我們必須引入新的規則
2、型別轉換函式
operator type()
#include using namespace std;
class test
int geti()
operator int() //型別轉換函式 };
int main()
我們在類中定義乙個型別轉換函式,我們想把類型別轉換成什麼基礎型別,就把type寫成那個型別。
test t(1);
int i = t;
t 這個物件為test型別,怎麼可能用於初始化 int 型別的變數呢!現在就報錯嗎?不急,我看看有沒有型別轉換函式!ok,發現test 類中定義了 operator int(),可以進行轉換。
其實編譯器是這樣做的:int i = t.operator int();
簡化就寫成int i = t
3、類型別之間怎麼相互轉換
#include using namespace std;
class value
};class test
int geti()
operator value() //test類型別轉換成value類型別 };
int main()
其實我們這裡就是直接定義乙個新的類value,因為我們是想將 test 類型別轉換成 value 類型別,所以在 test 類裡面定義成員函式 operator value()。
在程式的第35行,這條語句其實可以寫成這樣value v = t.operator value()
,也就是將它的返回值賦值給 v 物件。
如果同乙個程式既有轉換建構函式,又有型別轉換函式,那麼編譯器會如何反應呢?
#include using namespace std;
class test; //對test物件的宣告,告訴編譯器後面有test物件,因為value類裡面的轉換建構函式的引數是test類,但是編譯器不知道有這個東西,所以要先宣告一下
class value
value(test& t) };
class test
int geti()
operator value() //test類型別轉換成value類型別 };
int main()
在這個程式中,如果只有轉換建構函式或者只有型別轉換函式,程式執行就沒問題。如果這個程式中同時出現轉換建構函式和型別轉換函式,這個時候,編譯器就會犯難,到底應該呼叫那個呢?於是就會報錯。
所以我們可以把value類裡面的轉換建構函式加上explicit,這樣就沒問題了。
#include using namespace std;
class test; //對test物件的宣告,告訴編譯器後面有test物件,因為value類裡面的轉換建構函式的引數是test類,但是編譯器不知道有這個東西,所以要先宣告一下
class value
explicit value(test& t) };
class test
int geti()
operator value() //test類型別轉換成value類型別 };
int main()
把 value 類裡面的轉換建構函式加上explicit,最後輸出的結果明顯的對應的是test 類裡面的型別轉換函式。
#include using namespace std;
class test; //對test物件的宣告,告訴編譯器後面有test物件,因為value類裡面的轉換建構函式的引數是test類,但是編譯器不知道有這個東西,所以要先宣告一下
class value
explicit value(test& t) };
class test
int geti()
value tovalue() //test類型別轉換成value類型別 };
int main()
42 型別轉換函式(下)
類型別是否能轉換為普通型別?c 類中可以定義型別轉換函式,型別轉換函式用於將類物件轉換為其它型別。語法規則 operator type 返回type型別 type ret return ret include include using namespace std class test int va...
42 型別轉換函式(下)
注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 9.2.0 一 問題 類型別是否能夠型別轉換到普通型別?二 型別轉換函式 1 c 類中可以定義型別轉換函式 2 型別轉換函式用於將類物件轉換為其它型別 3 語法規則 operator ty...
C 42 型別轉換函式 (下)
問題 類型別是否能夠型別轉換到普通型別呢?include using namespace std class test int main 輸出 test.cpp in function int main test.cpp 14 error cannot convert test to int in ...