型別轉換函式的語法為:
operator
type()
operator 是 c++ 關鍵字,type 是要轉換的目標型別,data 是要返回的 type 型別的資料。
因為要轉換的目標型別是 type,所以返回值 data 也必須是 type 型別。既然已經知道了要返回 type 型別的資料,所以沒有必要再像普通函式一樣明確地給出返回值型別。這樣做導致的結果是:型別轉換函式看起來沒有返回值型別,其實是隱式地指明了返回值型別。
型別轉換函式也沒有引數,因為要將當前類的物件轉換為其它型別,所以引數不言而喻。實際上編譯器會把當前物件的位址賦值給 this 指標,這樣在函式體內就可以操作當前物件了。
【示例】為 complex 類新增型別轉換函式,使得 complex 型別能夠轉換為 double 型別。
#include
using
namespace std;
//複數類
class
complex
complex
(double real,
double imag)
:m_real
(real)
,m_imag
(imag)
public
:friend ostream &
operator
<<
(ostream &out, complex &c)
;friend complex operator+(
const complex &c1,
const complex &c2)
;operator
double()
const
//型別轉換函式
private
:double m_real;
//實部
double m_imag;
//虛部};
//過載》運算子
ostream &
operator
<<
(ostream &out, complex &c)
//過載+運算子
complex operator+(
const complex &c1,
const complex &c2)
intmain()
執行結果:
f = 24.6
f = 43.1
n = 43
本例中,型別轉換函式非常簡單,就是返回成員變數 m_real 的值,所以建議寫成 inline 的形式。
型別轉換函式和運算子的過載非常相似,都使用 operator 關鍵字,因此也把型別轉換函式稱為型別轉換運算子。
operator
double()
const
//轉換為double型別
operator
int(
)const
//轉換為int型別
那麼下面的寫法就會引發二義性:
complex c1
(24.6
,100);
float f =
12.5
+ c1;
編譯器可以呼叫 operator double() 將 c1 轉換為 double 型別,也可以呼叫 operator int() 將 c1 轉換為 int 型別,這兩種型別都可以跟 12.5 進行加法運算,並且從 complex 轉換為 double 與從 complex 轉化為 int 是平級的,沒有誰的優先順序更高,所以這個時候編譯器就不知道該呼叫哪個函式了,乾脆丟擲乙個二義性錯誤,讓使用者解決。 C C 數值型別轉換函式 轉)
1 atof 將字串轉換成浮點型數 標頭檔案 math.h或stdlib.h 語法 double atof const char nptr 說明 atof 會掃瞄引數nptr字串,跳過前面的空格字元,直到遇上數字或正負符號才 開始做轉換,而再遇到非數字或字串結束時 0 才結束轉換,並將結果返回。引數...
C C 型別轉換
include include using namespace std int main 程式的執行結果如下 註解 int a 相當於將浮點數a的位址的前sizeof int 個位元組當成int型的資料輸出。float a 1.0f在記憶體中的表示是0x3f800000,當 int a強制轉換時,會...
C C 型別轉換
如果乙個int型的變數值為5,則若使用強制型別轉換或者使用memcpy,則相當於直接copy記憶體中的值,若列印,則會列印5對應的ascii值 而若使用函式轉換,則函式會操作記憶體轉為ascii值的5,若列印,則直接為5。memcpy在一定程度上相當於強制型別轉換,但是可以制定拷貝的位元組大小,因此...