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 賦值轉換 不管賦值運算子右邊是什麼型別,都要轉換為賦值運算子左邊的變數型別 注 若賦值運算...