C 學習(一)型別轉換

2021-06-16 05:26:02 字數 1278 閱讀 2812

1.型別轉換按方式分為隱式轉換和顯式轉換。

隱式轉換:由編譯器自動完成,無需使用者干預。

顯式轉換:採用一定的形式進行轉換:型別名(資料) / c中(型別名)資料

2.關於轉換建構函式

建構函式的一種,主要用於型別轉換,格式嚴格規定為單引數建構函式。

例:complex類

complex(double r)  int(double r);

complex a;

a=2.4; 相當於a=complex(2.4);

編譯器如果發現語法有問題,會檢查是否存在轉換建構函式,有,則隱式轉換。

3.關於型別轉換函式

轉換建構函式是將一種資料型別轉換成類物件。如果編譯器發現需要將類轉換成某種資料型別,那該怎麼辦?

型別轉換函式的一般形式:operator 型別名()

沒有函式型別,沒有引數。

例:#include

using namespace std;

class complex

complex(double r,double i)

operator double()

private:

double real;

double imag; 

};int main()

d=2.5+c1;

由於類成員沒有對運算子+過載,所以2.5與c1無法直接向加。編譯器發現存在型別轉換函式,故將 隱式呼叫double(), c1轉換為 double 型3,並將該結果存放在臨時變數裡。運算d=2.5+3得到結果。

若主函式中有c3=2.5+c1;如果沒有運算子+的過載,編譯器會出錯。當 運算子過載函式作為類成員出現時,編譯器會理解為c3=2.5.operator +(c1);由於2.5非complex類,這種解析編譯器也會出錯。對於c3=c1+2.5的格式,編譯器會正確處理。

這種情況使使用者不能方便的使用交換率,為了改變這一不便,需要將過載函式作為友元函式而不是類成員函式。(雙目運算子的過載一般都採用友元函式的方式)

friend complex operator +(complex c1,complex c2);

在函式體外定義:

complex operator +(complex c1,complex c2);

這樣,對於c3=2.5+c1;(需要增加轉換建構函式)編譯器在遇到+號時,會搜尋+兩端的資料並引用友元的運算子過載函式,其形式變為:c3=operator+(2.5,c1); 而引數定義都是complex物件,因此,隱式呼叫轉換建構函式,形式變為:c3=operator+(complex (2.5),c1)

Python學習心得(一)型別

一 python中基本型別很簡單只有兩類 數和字串。通過類型別支援自定義擴充套件型別。1.數有四種型別 整數,長整數,浮點數,複數 浮點數 3.14和 3.1ee 5 複數 5 4i 和 2.3 4.6j 2.字串 字串行 的三種表式形式 形式 hello 可以包含 hello 你好 形式 hell...

Lua學習(一)型別和值

color blue 型別和值 color color blue 1 nil 空 color 未被賦值的變數預設值都為nil,將變數賦值nil等同刪除變數 color blue 2 boolean 布林 color false和nil都為 假 0和空字串 都為 真 color blue 3 numb...

C語言整理 一 型別和符號)

變數 程式執行時,其值能被改變的量 先定義,後使用 常量 程式執行時,其值不能被改變的量1 算術轉換 double float long unsigned int char short 從左往右,從下往上 2 賦值轉換 不管賦值運算子右邊是什麼型別,都要轉換為賦值運算子左邊的變數型別 注 若賦值運算...