C C 程式設計 型別轉換函式

2021-10-22 16:16:29 字數 1904 閱讀 3072

型別轉換函式的語法為:

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在一定程度上相當於強制型別轉換,但是可以制定拷貝的位元組大小,因此...