c++ 中,型別的名字(包括類的名字)本身也是一種運算子,即型別強制轉換運算子。
型別強制轉換運算子是單目運算子,也可以被過載,但只能過載為成員函式,不能過載為全域性函式。經過適當過載後,(型別名)物件這個對物件進行強制型別轉換的表示式就等價於物件.operator 型別名(),即變成對運算子函式的呼叫。
對 double 型別強制轉換運算子進行了過載。
#include
using
namespace std;
class
complex
;operator
double()
//過載強制型別轉換運算子 double};
intmain()
程式的輸出結果是:
1.2
3.2
第 8 行對 double 運算子進行了過載。過載強制型別轉換運算子時,不需要指定返回值型別,因為返回值型別是確定的,就是運算子本身代表的型別,在這裡就是 double。
過載後的效果是,第 13 行的(double)c等價於c.operator double()。
有了對 double 運算子的過載,在本該出現 double 型別的變數或常量的地方,如果出現了乙個 complex 型別的物件,那麼該物件的 operator double 成員函式就會被呼叫,然後取其返回值使用。
第 14 行,編譯器認為本行中c這個位置如果出現的是 double 型別的資料,就能夠解釋得通,而 complex 類正好過載了 double 運算子,因而本行就等價於:
double n =
2+ c.
operator
double()
;
強制轉換運算子和型別強制轉換運算子
char b a cout int b endl 在 c 中,型別的名字 包括類的名字 本身也是一種運算子,即型別強制轉換運算子。型別強制轉換運算子是單目運算子,也可以被過載,但只能過載為成員函式,不能過載為全域性函式。經過適當過載後,型別名 物件這個對物件進行強制型別轉換的表示式就等價於物件.op...
C 強制型別轉換運算子
將型別名作為強制型別轉換運算子的做法是c語言的老式做法,c 為保持相容而予以保留。c 引入了四種功能不同的強制型別轉換運算子 static cast reinterpret cast const cast和dynamic cast。強制型別轉換有一定的風險,有的轉換不一定安全,如把整型數值轉換成指標...
C 強制型別轉換運算子
c 將型別名作為強制型別轉換運算子。c 引入了四種功能不同的強制型別轉換運算子以進行強制型別轉換 static cast reinterpret cast const cast 和 dynamic cast。強制型別轉換是有一定風險的,有的轉換並不一定安全,如把整型數值轉換成指標,把基類指標轉換成派...