強制轉換運算子和型別強制轉換運算子

2021-10-03 13:37:48 字數 1125 閱讀 2706

char b =

'a';

cout <<

(int

)b << endl;

在 c++ 中,型別的名字(包括類的名字)本身也是一種運算子,即型別強制轉換運算子。

型別強制轉換運算子是單目運算子,也可以被過載,但只能過載為成員函式,不能過載為全域性函式。經過適當過載後,(型別名)物件這個對物件進行強制型別轉換的表示式就等價於物件.operator 型別名(),即變成對運算子函式的呼叫。

下面的程式對 double 型別強制轉換運算子進行了過載。

#include

using

namespace std;

class

complex

;operator

double()

//過載強制型別轉換運算子 double};

intmain()

程式的輸出結果是:

1.23.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()

;

下面的**也使用了型別強制轉換:

int x;

while

(cin>>x)

return

0;

cin中過載了bool型,程式判斷while()中應當出現bool型,故cin>>x被強制轉換為bool型。

C 強制型別轉換運算子

將型別名作為強制型別轉換運算子的做法是c語言的老式做法,c 為保持相容而予以保留。c 引入了四種功能不同的強制型別轉換運算子 static cast reinterpret cast const cast和dynamic cast。強制型別轉換有一定的風險,有的轉換不一定安全,如把整型數值轉換成指標...

C 強制型別轉換運算子

c 將型別名作為強制型別轉換運算子。c 引入了四種功能不同的強制型別轉換運算子以進行強制型別轉換 static cast reinterpret cast const cast 和 dynamic cast。強制型別轉換是有一定風險的,有的轉換並不一定安全,如把整型數值轉換成指標,把基類指標轉換成派...

C 過載強制型別轉換運算子

c 中,型別的名字 包括類的名字 本身也是一種運算子,即型別強制轉換運算子。型別強制轉換運算子是單目運算子,也可以被過載,但只能過載為成員函式,不能過載為全域性函式。經過適當過載後,型別名 物件這個對物件進行強制型別轉換的表示式就等價於物件.operator 型別名 即變成對運算子函式的呼叫。對 d...