C++重載轉型操作符
<上一節
下一節>
在前面我們已經介紹過轉型構造函數,轉型構造函數可以將其它類型的參數轉換為類類型,如果我們要進行相反的轉換過程,將類類型轉換為其它數據類型,則需重載轉型操作符。轉型操作符重載函數的聲明語法如下:
operator 類型名 ();
轉型操作符重載函數有幾點需要注意的:
例1:
轉型操作符重載可以給程序帶來一定的方便,但是建議還是謹慎使用。因為系統通常在需要的時候就會調用轉型操作符重載函數,該函數的調用時隱式的,有時候會給程序帶來一些意想不到的問題。
operator 類型名 ();
轉型操作符重載函數有幾點需要注意的:
- 函數沒有返回類型;
- 雖然沒有返回類型但是函數體中必須有return語句,其返回類型是由類型名來指定的;
- 轉型操作符重載函數只能以類的成員函數的形式進行重載,而不能以友元函數或頂層函數的形式進行重載。
例1:
#include <iostream> using namespace std; class clock { public: clock(){hour = min = ap = 0;} clock(int h, int m, int ap); operator int(); private: int hour; int min; int ap; // 0表示am, 1表示pm }; clock::clock(int h, int m, int ap) { hour = h; min = m; this->ap = ap; } //轉型操作符重載函數 clock::operator int() { int time = hour; if(time == 12) time = 0; if(ap == 1) time += 12; time *= 100; time += min; return time; } int main() { clock c(5,7,1); int time = c; cout<<time<<endl; return 0; }在本例中我們重載了一個時鐘類clock,該類中我們聲明了一個轉型操作符重載函數,該函數可以將類類型的時間轉換為一個整形,轉換后的整數是軍事時間。在主函數中我們定義了一個clock類的對象c,之后將其賦給一個整形變量time,因為我們定義了轉型操作符重載函數,因此這一句話并沒有出現語法錯誤。
轉型操作符重載可以給程序帶來一定的方便,但是建議還是謹慎使用。因為系統通常在需要的時候就會調用轉型操作符重載函數,該函數的調用時隱式的,有時候會給程序帶來一些意想不到的問題。
<上一節
下一節>