為什麼需要轉換運算子?
大家知道對於內建類型的資料我們可以通過強制轉換符的使用來轉換資料,例如(int)2.1f;自訂類也是類型,那麼自訂類的對象在很多情況下也需要支援此操作,C++提供了轉換運算子多載函數,它使得自訂類對象的強轉換成為可能。
轉換運算子的生命方式比較特別,方法如下:
operator 類名();
轉換運算子的重載函數是沒有傳回型別的,它和類的建構函式,解構函式一樣是不遵循函數有傳回型別的規定的,他們都沒有傳回值。
下面我看一個例子,看看它是如何工作的:
//例1
//程式作者:管寧
//網站:www.cndev-lab.com
//所有稿件均有著作權,如要轉載,請務必著名出處和作者
#include <iostream>
using namespace std;
class Test
{
public:
Test(int a = 0)
{
cout<<this<<":"<<"載入建構函式!"<<a<<endl;
Test::a = a;
}
Test(Test &temp)
{
cout<<"載入拷貝建構函式!"<<endl;
Test::a = temp.a;
}
~Test()
{
cout<<this<<":"<<"載入解構函式!"<<this->a<<endl;
cin.get();
}
operator int()//轉換運算子
{
cout<<this<<":"<<"載入轉換運算子函數!"<<this->a<<endl;
return Test::a;
}
public:
int a;
};
int main()
{
Test b(99);
cout<<"b的記憶體位址"<<&b<<endl;
cout<<(int)b<<endl;//強轉換
system("pause");
}
在例子中我們利用轉換運算子將Test類的對象強轉換成了int類型並輸出,注意觀察轉換運算子函數的運行狀態,發現並沒有產生臨時對象,證明了它與普通函數並不相同,雖然它帶有return語句。