1,轉換建構函式可以將普通的基礎型別轉換為當前的類型別,也有能力將其它類類 型的物件轉換為當前的類型別;
2,問題:
1,類型別是否能夠型別轉換到普通型別?
1,可以的;
3,型別轉換函式:
1,c++ 類中可以定義型別轉換函式;
2,型別轉換函式用於將類物件轉換為其他型別;
1,不管什麼型別都可以;
3,語法規則:
1,**示例:
14,型別轉換函式初探程式設計實驗:operator type () //
operator 表示定義型別轉換函式,type 表示返回值,沒有引數;
2
1,main.cpp 檔案:
1 #include 2 #include 344,型別轉換函式:using
namespace
std;56
class
test714
intvalue()
1518
operator
int () //
型別轉換函式;
1922
};23
24int
main()
25
1,與轉換建構函式具有同等的地位;
2,使得編譯器有能力將物件轉化為其它型別;
3,編譯器能夠隱式的使用型別轉換函式;
4,編譯器會盡力嘗試讓原始碼通過編譯:
1,這裡實質是隱式型別轉換;
5,類型別之間的相互轉換:
1,型別轉換函式 vs 轉換建構函式
2,類型別之間的轉換程式設計實驗:
1,main.cpp 檔案:
1 #include 2 #include 342,編譯輸出:using
namespace
std;56
class
test;78
class
value914
explicit value(test&t)
1517
};18
19class
test
2027
intvalue()
2831
operator
value()
3237
/*38
工程上通過以下方式;
39value tovalue()
4045
*/46
};47
48int
main()
49
1,當 value 類建構函式不加 explicit 修飾時:
error: conversion from 『test』 to 『value』 is ambiguous
note: candidates are: test::operator value()
note: value::value(test&)
2,當 value 類建構函式加 explicit 修飾時:
1,編譯通過;
3,轉換建構函式和型別轉換函式是互逆的,但是當遇到類型別之間的轉換時,它們之間是有衝突的,編譯器不知道如何選擇,應該在轉換建構函式之前加 explicit 修飾;
3,無法抑制隱式的型別轉換函式呼叫;
4,型別轉換函式可能與轉換建構函式衝突;
1,可通過 explicit 修飾轉換建構函式解決;
5,工程中以 type totype() 的公有成員代替型別轉換函式;
1,工程中一般不定義型別轉換函式;
2,抑制型別轉換函式呼叫;
3,qt 中的示例:
1 #include 2 #include 35,小結:4int
main()
5
1,c++ 類中可以定義型別轉換函式;
2,型別轉換函式用於將類物件轉換為其它型別;
3,型別轉換函式與轉換建構函式具有同等的地位;
4,工程中以 type totype() 的公有成員代替型別轉換函式;
C 中的型別轉換函式
1.四種 static cast,dynamic cast,const cast,reinterpret cast 2.他們的使用 1 static cast 任何隱式轉換都可以由它完成,僅當型別之間可隱式轉換時 除類層次間的下行轉換 static cast的轉換才是合法的,否則將出錯。class ...
C 的型別轉換函式
c 的型別轉換函式 reinterpret cast const cast static cast 和dynamic cast 前三個型別轉換是在 編譯時實現轉換 dynamic cast 是在執行時進行型別轉換的。reinterpret cast expression const cast new...
C 的型別轉換函式
c 的型別轉換函式 reinterpret cast const cast static cast 和dynamic cast 前三個型別轉換是在 編譯時實現轉換 dynamic cast 是在執行時進行型別轉換的。reinterpret cast expression const cast new...