為什么需要轉(zhuǎn)換運(yùn)算符?
我們大家知道對于內(nèi)置類型的數(shù)據(jù)我們可以通過強(qiáng)制轉(zhuǎn)換符的使用來轉(zhuǎn)換數(shù)據(jù),例如(int)2.1f;自定義類也是類型,那么自定義類的對象在很多情況下也需要支持此操作,C++提供了轉(zhuǎn)換運(yùn)算符重載函數(shù),它使得自定義類對象的強(qiáng)轉(zhuǎn)換成為可能。
轉(zhuǎn)換運(yùn)算符的生命方式比較特別,方法如下:
operator 類名();
轉(zhuǎn)換運(yùn)算符的重載函數(shù)是沒有返回類型的,它和類的構(gòu)造函數(shù),析構(gòu)函數(shù)一樣是不遵循函數(shù)有返回類型的規(guī)定的,他們都沒有返回值。
下面我看一個例子,看看它是如何工作的:
C++ 代碼
//例1
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請務(wù)必出處和作者
#include
using namespace std;
class Test
{
public:
Test(int a = 0)
{
cout< }
Test(Test &temp)
{
cout<<"載入拷貝構(gòu)造函數(shù)!"< Test::a = temp.a;
}
~Test()
{
cout<a< cin.get();
}
operator int()//轉(zhuǎn)換運(yùn)算符
{
cout<a< return Test::a;
}
public:
int a;
};
int main()
{
Test b(99);
cout<<"b的內(nèi)存地址"<<&b< cout<<(int)b< system("pause");
}
在例子中我們利用轉(zhuǎn)換運(yùn)算符將Test類的對象強(qiáng)轉(zhuǎn)換成了int類型并輸出,注意觀察轉(zhuǎn)換運(yùn)算符函數(shù)的運(yùn)行狀態(tài),發(fā)現(xiàn)并沒有產(chǎn)生臨時對象,證明了它與普通函數(shù)并不相同,雖然它帶有return語句。
在很多情況下,類的強(qiáng)轉(zhuǎn)換運(yùn)算符還可以作為類對象加運(yùn)算重載函數(shù)使用,盡管他們的意義并不相同,下面的例子,就是利用轉(zhuǎn)換運(yùn)算符,將兩個類對象轉(zhuǎn)換成int后,相加并創(chuàng)建臨時類對象,后再賦給另一個對象。
代碼如下
C++ 代碼
//例2
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請務(wù)必出處和作者
#include
using namespace std;
class Test
{
public:
Test(int a = 0)
{
cout< }
Test(Test &temp)
{
cout<<"載入拷貝構(gòu)造函數(shù)!"< Test::a = temp.a;
}
~Test()
{
cout<a< cin.get();
}
operator int()
{
cout<a< return Test::a;
}
public:
int a;
};
int main()
{
Test a(100),b(100),c;
cout<<"a的內(nèi)存地址"<<&a<<" | b的內(nèi)存地址"<<&b< c=Test((int)a+(int)b);//顯示式轉(zhuǎn)換
//c=a+b;//隱式轉(zhuǎn)換
cout<<"c的內(nèi)存地址"<<&c< cout< system("pause");
}
代碼中的c=a+b;屬于隱式轉(zhuǎn)換,它的實(shí)現(xiàn)過程與c=Test((int)a+(int)b);完全相同。
我們大家知道對于內(nèi)置類型的數(shù)據(jù)我們可以通過強(qiáng)制轉(zhuǎn)換符的使用來轉(zhuǎn)換數(shù)據(jù),例如(int)2.1f;自定義類也是類型,那么自定義類的對象在很多情況下也需要支持此操作,C++提供了轉(zhuǎn)換運(yùn)算符重載函數(shù),它使得自定義類對象的強(qiáng)轉(zhuǎn)換成為可能。
轉(zhuǎn)換運(yùn)算符的生命方式比較特別,方法如下:
operator 類名();
轉(zhuǎn)換運(yùn)算符的重載函數(shù)是沒有返回類型的,它和類的構(gòu)造函數(shù),析構(gòu)函數(shù)一樣是不遵循函數(shù)有返回類型的規(guī)定的,他們都沒有返回值。
下面我看一個例子,看看它是如何工作的:
C++ 代碼
//例1
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請務(wù)必出處和作者
#include
using namespace std;
class Test
{
public:
Test(int a = 0)
{
cout<
Test(Test &temp)
{
cout<<"載入拷貝構(gòu)造函數(shù)!"<
}
~Test()
{
cout<
}
operator int()//轉(zhuǎn)換運(yùn)算符
{
cout<
}
public:
int a;
};
int main()
{
Test b(99);
cout<<"b的內(nèi)存地址"<<&b<
}
在例子中我們利用轉(zhuǎn)換運(yùn)算符將Test類的對象強(qiáng)轉(zhuǎn)換成了int類型并輸出,注意觀察轉(zhuǎn)換運(yùn)算符函數(shù)的運(yùn)行狀態(tài),發(fā)現(xiàn)并沒有產(chǎn)生臨時對象,證明了它與普通函數(shù)并不相同,雖然它帶有return語句。
在很多情況下,類的強(qiáng)轉(zhuǎn)換運(yùn)算符還可以作為類對象加運(yùn)算重載函數(shù)使用,盡管他們的意義并不相同,下面的例子,就是利用轉(zhuǎn)換運(yùn)算符,將兩個類對象轉(zhuǎn)換成int后,相加并創(chuàng)建臨時類對象,后再賦給另一個對象。
代碼如下
C++ 代碼
//例2
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請務(wù)必出處和作者
#include
using namespace std;
class Test
{
public:
Test(int a = 0)
{
cout<
Test(Test &temp)
{
cout<<"載入拷貝構(gòu)造函數(shù)!"<
}
~Test()
{
cout<
}
operator int()
{
cout<
}
public:
int a;
};
int main()
{
Test a(100),b(100),c;
cout<<"a的內(nèi)存地址"<<&a<<" | b的內(nèi)存地址"<<&b<
//c=a+b;//隱式轉(zhuǎn)換
cout<<"c的內(nèi)存地址"<<&c<
}
代碼中的c=a+b;屬于隱式轉(zhuǎn)換,它的實(shí)現(xiàn)過程與c=Test((int)a+(int)b);完全相同。