c 類的自動型別轉換和強制型別轉換

2021-10-08 20:19:04 字數 1784 閱讀 9954

下面討論類的型別轉換。

我們先來看看c++是如何處理內建型別轉換的。將乙個標準型別變數的值賦給另一種標準型別的變數時,如果這兩種型別相容,則c++自動將這個值轉換為接受變數的型別。

double time =11;

//int value 11 converted to type double

利用建構函式將內建型別->類

在c++中,接受乙個引數的建構函式為將型別與該引數相同的值轉換為類提供了藍圖。下面的建構函式用於將double轉換為stonewt類型別;

class

stonewt

;stonewt

(double l)

;//double to stonewt conversion

stonewt mycat;

mycat =

19.6

;//convert 19.6 to stonewt

注意!!只有接受乙個引數的建構函式才能作為轉換函式

stonewt(int stn, double lbs); //not a conversion function

但若給第二個引數提供預設值,則可以:

stonewt(int stn, double lbs = 0); // int to stonewt conversion

上面介紹的是隱式轉換,但通常這會導致意外的型別轉換,c++的關鍵字explict限制了這種隱式轉換,可以這樣宣告建構函式:

explicit stonewt(double lbs); // 不允許隱式轉換

stonewt mycat;

mycat = 19.6 ;// not valid

mycat = stonewt (19.6) ;// valid

mycat = (stonewt) 19.6 ; // valid

小結:對於建構函式stonewt(double),若在宣告使用了explicit,則stonewt(double) 將只用於顯示強制型別轉換。若在宣告前沒有加explicit關鍵字,則可以用於下面的隱式轉換:

1)將stonewt物件初始化double值時

2)將double值賦給stonewt物件時

3)將double值傳遞給接受stonewt引數的函式時。

4)返回值被宣告為stonewt的函式試圖返回double值時。

5)在上述任意一種情況下,使用可轉換為double型別的內建型別時。

類型別->內建型別(轉換函式)

上面講了利用建構函式將內建型別轉換為類型別,也可以利用特殊的c++運算子函式----轉換函式做相反的轉換。

轉換函式是使用者定義的強制型別轉換。如果定義了從stonewt到double的轉換函式,則可以使用下面的轉換:

stonewt wolfe

(285.7);

double host =

double

(wolfe)

;double thinker =

(double

) wolfe;

double star = wolfe;

那如何建立轉換函式呢?要轉換為typename型別,需要下面型別的轉換函式:

operator typename();

notice:

1)轉換函式必須是類方法;

2)轉換函式不能指定返回型別;

3)轉換函式不能有引數。

類的自動型別轉換和強制型別轉換

1.可以將類定義成與基本型別或者另乙個類相關,使得從乙個類轉換成另外乙個型別是有意義的。2.將基本型別轉換成類 下面以double轉換成money類來舉例 假設定義了如下類 class money 則其中的建構函式money double r 可以講double型別轉換成money類這個型別。只有接...

類的自動轉換和強制型別轉換

內建型別轉換 將乙個標準型別變數的值賦給另乙個標準型別的變數時,如果這兩種型別相容,則c 自動將這個值轉變為接收變數的型別。eg long cout 8 int型的8將被轉換為long double time 11 int型的11將被轉換為double int side 3.33 double型別的...

類的自動轉化和強制型別轉換(C )

可以將類定義成與基本型別或另乙個類相關,使得從一種型別轉換為另一種型別是有意義的。當乙個類的建構函式中,有只有接受乙個引數的建構函式,這個建構函式就能作為轉換函式。pragma once ifndef stonewt h define stonewt h class stonewt int ston...