42 型別轉換函式(下)

2021-09-26 21:46:13 字數 2578 閱讀 9118

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