型別轉換是將一種型別的值對映為另一種型別的值。型別轉換實際上包含有自動隱含和強制的兩種。
型別的自動隱式轉換
c++語言編譯系統提供的內部資料型別的自動隱式轉換規則如下:
1. 程式在執行算術運算時,低型別可以轉換為高型別。
2. 在賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值給它。
3. 當在函式呼叫時,將實參值賦給形參,系統隱式地將實參轉換為形參的型別後,賦給形參。
4. 函式有返回值時,系統將自動地將返回表示式型別轉換為函式型別後,賦值給呼叫函式。
在以上情況下,系統會進行隱式轉換的。當在程式中發現兩個資料型別不相容時,又不能自動完成隱式轉換,則將出現編譯錯誤。例如:
int * p = 100;
在這種情況下,編譯程式將報錯,為了消除錯誤,可以進行如下所示的強制型別轉換:
int * p = (int *)100;
將整型數100顯式地轉換成指標型別。
建構函式具有型別轉換功能
在實際應用中,當類定義中提供了單個引數的建構函式時,該類便提供了一種將其他資料型別的數值或變數轉換為使用者所定義資料型別的方法。因此,可以說單個引數的建構函式提供了資料轉換的功能。下面通過乙個例子進一步說明單引數建構函式的型別轉換功能。
#include
class a
a(double i)
void print() ;
void main()
程式的輸出結果為:
10在該程式中,賦值語句a=10;中,賦值號兩邊數值10和物件a是兩上不相容的資料型別,可是它卻能順利通過編譯程式,並且輸出顯示正確結果,其主要原因是得益於單引數的建構函式。編譯系統選通過標準資料型別轉換,將整型數值10轉換成double型,然後,再通過類中定義的單引數建構函式將double型數值轉換為a類型別,最後把它賦值給a。這些轉換都是自動隱式完成的。
轉換函式
轉換函式又稱型別強制轉換成員函式,它是類中的乙個非靜態成員函式。它的定義格式如下:
class 《型別說明符1>
這個轉換函式定義了由《型別說明符1>到《型別說明符2>之間的對映關係。可見,轉換函式是用來將一種型別的資料轉換成為另一種型別。下面通過乙個例子說明轉換函式的功能。
#include
class rational
operator double(); file://型別轉換函式
private:
int den, num;
};rational::operator double()
void main()
程式輸出結果:
5.325
由程式可知,d是乙個double型數值,r是rational類的物件,這兩個不同型別的資料進行加法之所以能夠進行是得益於轉換函式operator double()。為使上述加法能夠進行,編譯系統先檢查類rational的說明,看是否存在在下轉換函式能夠將rational型別的運算元轉換為double型別的運算元。由於rational類中說明了轉換函式operator double(),它可以在程式執行時進行上述型別轉換,因此,該程式中實現了d+=r;的操作。
定義轉換函式時應注意如下幾點:
(1) 轉換函式是使用者定義的成員函式,但它要是非靜態的。
(2) 轉換函式不可以有返回值。
(3) 轉換函式也不帶任何引數。
(4) 轉換函式函式還不能定義為友元函式。
轉換函式的名稱是型別轉換的目標型別,因此,不必再為它指定返回值型別;轉換函式是被用於本型別的數值或變數轉換為其他的型別,也不必帶引數。
mysql型別轉換c 型別轉換 C 型別轉換
一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...
C 型別轉換
在程式中,進行型別轉換是常見的事。那麼在 c 中支援以前語言的型別轉換方法,即用型別名進行強行轉換,例如 object objtest new newtype newtype newvalue newtype objtest 但是這樣轉換,有個嚴重的問題,就是在把 objtest 強轉換成 newt...
C 型別轉換
c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a。c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。看似問題複雜化了,其實不然。c風格的型別轉換在程式語句中難以識別,型別轉換是去 const,還是int轉換成char,或是子類指標轉...