C++ 中operator用法:隱式類型轉換

來源:互聯網
上載者:User

C++中的operator主要有兩個作用,一是操作符的重載,一是操作符的轉換。對於操作符的重載,許多人都不陌生,用以下這個小例子溫故一下:

class A{    public:    A operator +(A& oa){A a;a.num=oa.num+num;return a;}    int num;};int main(int argc,char* argv[]){    A a; a.num=1;    A b; b.num=2;    A c;    c=a+b;    cout<<"c.num: "<<c.num<<endl;}程式輸出為:c.num: 3;

很簡單,也很容易理解。下面有必要系統說下operator運算元的另一大功能 操作符的轉換:operator T

文法很簡單,在類的成員函式宣告部分作出聲明即可:

class A {public:    ......    operator int(){return num;};  // 在需要情況下, A對象可以轉成int類型對象。    ......    int num; };

這條聲明使得以下語句成立:

cout<<c+12<<endl; //其中c是A類型的對象

又發生了隱式的類型轉換,這一次,我們可以直接用類的對象去產生一個其他的類型,是不是想到了建構函式的隱式類型轉換部分呢?下面我們就來做一個小小的總結:

建構函式的隱式類型轉換部分,使用一個其他的類型構造當前類的臨時對象,這種轉換必須有建構函式的支援;operator運算元的隱式類型轉換,使用當前對象去產生另一個類型的對象(正好與建構函式型相反),這種轉換必須有operator運算元的支援。

隱式的類型轉換有利有弊,類的設計者就起決定性作用了,如果你不想讓建構函式發生隱式的類型轉換,請在建構函式前加explicit關鍵字;同時,operator運算元聲明的隱式類型轉換也可以通過一些相應的傳回值函數替代,使用者的掌控性更好。

建議參考閱讀本部落格隱式類類型轉換一文。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.