C++運算子多載轉換運算子

來源:互聯網
上載者:User

為什麼需要轉換運算子?

大家知道對於內建類型的資料我們可以通過強制轉換符的使用來轉換資料,例如(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語句。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.