14.9 轉換與類類型
14.9.1 轉換為什麼有用
1. 支持混合類型表達式
2. 轉換減少所需操作符的數目
14.9.2 轉換操作符
轉換操作符(conversion operator)是一種特殊的類成員函數。它定義將類類型值轉變為其他類型值的轉換。轉換操作符在類定義體內聲明,在保留字operator之後跟著轉換的目標類型。
class SmallInt{
public:
SmallInt(int i=0):val(i)
{
if(i<0||i>255)
{
throw out_of_range("out of range");
}
}
operator int() const
{
return val;
}
private:
size_t val;
};
對任何可作為函數返回類型的類型(除了void之外)都可以定義轉換函數。一般而言,不允許轉換為數組或函數類型,轉換為指針類型(數據和函數指針)以及引用類型是可以的。
轉換函數必須是成員函數,不能指定返回類型,並且形參表必須為空。
雖然轉換函數不能指定返回類型,但是每個轉換函數必須顯式返回一個指定類型的值。
轉換函數一般不應該改變被轉換的對象。因此,轉換操作通常應定義為const成員。
1.使用類類型轉換
cout<< SmallInt(100)<<endl;
2. 類類型轉換和標准轉換
SmallInt i(100);
cout<<(i<10.10)<<endl;
使用轉換函數時,被轉換的類型不必與所需要的類型完全匹配。必要時可在類類型轉換之後跟上標准轉換以獲得想要的類型。
3. 只能應用一個類類型轉換
類類型轉換之後不能再跟另一個類類型轉換。如果需要多個類類型轉換,則代碼將出錯。
4. 標准轉換可放在類類型轉換之前
使用構造函數執行隱式轉換的時候,構造函數的形參類型不必與所提供的類型完全匹配。
摘自 xufei96的專欄