1.所謂轉換函數,就是一個對象是否可以轉換爲另外一種類型。轉出去,轉進來。
2.代碼例子:
class Fraction
{
public:
Fraction(int num, int den =1)
:m_numberatror(num),m_denominator(den){}
operator double() const {return (double) (m_numerator/m_denominator(den)); }
private:
int m_numerator; //分子
int m_denominator; //分母
};
這是一個分數類。當然,分數可以轉換爲double類型,所以,可以又一個double()來轉換,注意格式operator。
operator double() const {return (double) (m_numerator/m_denominator(den));
這個就是轉換函數。它沒有返回類型,返回就是double,轉換是無法改變class中的data。所以轉換函數通常會加上const
3.轉換函數何時被調用?
例子:
Fraction f(3,5);
double d= 4 + f;
第二句的時候,會直接調用operator double()將f轉換爲0.6.這個過程是由編譯器來尋找operator+是否有函數。
但是編譯器沒有找到operator+的函數,接着會繼續找是否有f轉換爲double的轉換函數,OK,有double()這個函數
那麼就會將f轉換爲0.6.。
4.這個例子就是將本身轉換出去。
但是轉換必須要合理,假如我們希望Fraction轉換爲string合理的話,那麼也能寫operator String()....