C++筆記 第四十二課 型別轉換函式(下)類型別---其他型別---狄泰學院
阿新 • • 發佈:2018-11-23
如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習C++編譯環境:Linux
第四十二課 型別轉換函式(下)類型別—>其他型別
1.問題
類型別是否能夠型別轉換到普通型別?用編譯器測試—可以,引入新的語法規則
2.型別轉換函式
C++類中可以定義型別轉換函式
型別轉換函式用於將類物件轉換為其他型別
語法規則:
42-1 型別轉換函式初探
#include <iostream> #include <string> using namespace std; class Test { int mValue; public: Test(int i = 0) { mValue = i; } int value() { return mValue; } operator int() { return mValue; } }; int main() { Test t(100); int i = t; //int i = t.operator int(); //程式碼中是隱式型別轉換 cout << "t.value() = " << t.value() << endl; cout << "i = " << i << endl; return 0; } 執行結果 t.value() = 100 i = 100
型別轉換函式
與轉換建構函式具有同等的地位
使得編譯器有能力將物件轉化為其他型別
編譯器能夠隱式的使用型別轉換函式
編譯器會盡力嘗試讓原始碼通過編譯
類型別之間的相互轉換?!完全可以
型別轉換函式VS轉換建構函式
operator Value(){} VS Value(Test& t){}
當加上explicit Value(Test& t){},錯誤改正
42-2 類型別之間的轉換
#include <iostream> #include <string> using namespace std; class Test; class Value { public: Value() { } explicit Value(Test& t) //轉換建構函式 { } }; class Test { int mValue; public: Test(int i = 0) { mValue = i; } int value() { return mValue; } operator Value()//型別轉換函式 Value toValue() 工程中的解決方案 { Value ret; cout << "operator Value()" << endl; return ret; } }; int main() { Test t(100); Value v = t; return 0; }
無法抑制隱式的型別轉換函式呼叫
型別轉換函式可能與轉換建構函式衝突
工程中Type toType()的公有成員代替型別轉換函式
#include <QDebug> #include <QString> int main() { QString str = ""; int i = 0; double d = 0; short s = 0; str = "-255"; i = str.toInt(); d = str.toDouble(); s = str.toShort(); qDebug() << "i = " << i << endl; qDebug() << "d = " << d << endl; qDebug() << "s = " << s << endl; return 0; }
小結
C++類中可以定義型別轉換函式
型別轉換函式用於將類物件轉換為其他型別
型別轉換函式與轉換建構函式具有同等的地位
工程中以Type toType()的公有成員代替型別轉換函式