注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。
測試環境: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 ...