類的自動型別轉換和強制型別轉換
阿新 • • 發佈:2019-01-26
1.可以將類定義成與基本型別或者另一個類相關,使得從一個類轉換成另外一個型別是有意義的。
2.將基本型別轉換成類(下面以double轉換成Money類來舉例):
假設定義瞭如下類:
則其中的建構函式class Money { private: double RMB; double DOLLAR; public: Money(); Money(double r, double d); Money(double r); ~Money(); friend ostream & operator<<(ostream & os, Money & m); };
Money(double r);
可以講double型別轉換成Money類這個型別。
●只有接受一個引數的建構函式才能作為轉換函式
●或者有多個引數,但是除第一個引數沒有預設值外,其他所有的引數都有預設值,這樣的建構函式也可作為轉換函式
●在正常情況下,以下程式碼是有效的:
Money m;
m = 12.3;
這種轉換成為隱式轉換。
●隱式轉換有時候會導致意外的型別轉換,所以我們有時需要關閉隱式轉換,這時我們使用關鍵字explicit:
explicit Money(double r);
使用了關鍵字explicit後,則程式碼:
Money m;
m = 12.3;
是無效的,只能使用如下方式將double型別轉換成Money類:
Money m(12.3);//或者類似初始化方式
3.類轉換為其他型別:
●建構函式只能用於從某種型別到類型別的轉換。要進行相反的轉換,必須使用特殊的c++運算子函式---轉換函式
●注意一下幾點:
①轉換函式必須是類的方法
②轉換函式不能指定返回型別
③轉換函式不能有引數
●轉換函式舉例:
假設有如下類定義:
其中的class Money { private: double RMB; double DOLLAR; public: Money(); Money(double r, double d); Money(double r); ~Money(); operator double(); //轉換函式,用於將Money類轉換成double型別 friend ostream & operator<<(ostream & os, Money & m); };
operator double(); //轉換函式,用於將Money類轉換成double型別
就是我們定義的轉換函式,定義方法是operator typeName()
轉換函式的使用:
int main()
{
Money m(2.3);
double result;
result = m;
cout << m;
cout << result;
return 0;
}
這樣就可以將類轉換成double。上例中也可以在result前加上(int)轉換成整數型別。