42 型別轉換函式(下)

2021-10-24 10:18:34 字數 1763 閱讀 9752

注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。

測試環境:ubuntu 10.10

gcc版本:9.2.0

一、問題

類型別是否能夠型別轉換到普通型別?

二、型別轉換函式

1)c++類中可以定義型別轉換函式

2)型別轉換函式用於將類物件轉換為其它型別

3)語法規則:

operator type()

程式設計實驗

型別轉換函式初探

42-1.cpp

#include #include using namespace std;

class test

int value()

operator int () //型別轉換函式

};int main()

操作:

1) g++ 42-1.cpp -o 42-1.out編譯正確,列印結果:

t.value() = 100

i = 100

三、型別轉換函式

1)型別轉換函式

-    與轉換建構函式具有同等的地位

-    使得編譯器有能力將物件轉化為其它型別

-    編譯器能夠隱式的使用型別轉換函式

2)編譯器會盡力嘗試讓原始碼通過編譯

3)型別轉換函式

類型別之間的相互轉換?!型別轉換函式 vs 轉換建構函式 

程式設計實驗

類型別之間的轉換

42-2.cpp

#include #include using namespace std;

class test;

class value

explicit value(test& t) //轉換建構函式 explicit禁止編譯器隱式型別轉換

};class test

int value()

operator value() //類型別轉換函式

/*value tovalue() //公有成員代替型別轉換函式。和上邊效果一致

*/};int main()

操作:

1) g++ 42-2.cpp - o 42-2.out編譯正常,列印結果:

operator value()
分析:

執行value v = t;時t被編譯器隱式轉換成t.operaotr value()(呼叫了型別轉換函式)。

1)無法抑制隱式的型別轉換函式呼叫

2)型別轉換函式可能與轉換建構函式衝突

3)工程中以type 

totype()的公有成員代替型別轉換函式

#include #include int main()

列印結果:

i = -255

d = -255

s = -255

小結

1)c++類中可以定義型別轉換函式

2)型別轉換函式用於將類物件轉換為其它型別

3)型別轉換函式與轉換建構函式具有同等的地位

4)工程中以type 

totype()的公有成員代替型別轉換函式

42 型別轉換函式(下)

類型別是否能轉換為普通型別?c 類中可以定義型別轉換函式,型別轉換函式用於將類物件轉換為其它型別。語法規則 operator type 返回type型別 type ret return ret include include using namespace std class test int va...

42 型別轉換函式(下)

1 問題 我們上一課的內容是將普通型別轉換成類型別,那麼問題來了,我們能否將類型別轉換到普通型別?單純這樣肯定是不行的,我們必須引入新的規則 2 型別轉換函式 operator type include using namespace std class test int geti operator...

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