定義一個類的類型轉換結果

來源:互聯網
上載者:User

今天看《Effective C++》,發現了一個一直不懂的技巧,就是定義一個類在進行類型轉換後的結果,例如我有一個這樣的類:

class Sum2Int {    int a,b;public:    explicit sum2Int(int aa, int bb) : a(aa), b(bb) {}};

如果我希望它可以轉換成int的時候,得到的結果是a+b,應該怎麼做?我以前的做法都是在類裡面另外定義一個成員函數,例如叫get()之類的,如下:

class Sum2Int {    int a,b;public:    explicit Sum2Int(int aa, int bb) : a(aa), b(bb) {}    int get() {        return a+b;    }};

這樣可以達到目的,但是有點繁瑣,如果有一個函數是:void print(int num),那麼在傳遞參數的時候,我就必須寫print(Sum2Int(2,1).get())。這樣做也有好處,就是別人知道這個類有這麼一個函數可以返回一個int值。不過現在說說新的方法,請參見以下代碼:

#include<iostream>using namespace std;class Sum2Int {    int a,b;public:    explicit Sum2Int(int aa, int bb) : a(aa), b(bb) {}    operator int() const {        return a+b;    }     operator double() const {        return 1.0*a + 1.0*b;    }    int get() {        return a+b;    }};void prt(int k) {    cout<<k<<endl;}void prt2(double k){     cout<<k<<endl;}int main(){    int a,b;    while(true)    {        cin>>a>>b;        prt(Sum2Int(a,b));        prt2(Sum2Int(a,b));        cout<<Sum2Int(a,b).get()<<endl;    }}

在進行參數傳遞的時候,(我估計但不確定)編譯器會嘗試對類實行類型轉換,如果重載了類型轉換,那麼就可以直接轉換成功。這麼做的用處有什麼呢?其實就是方便……要考慮有很多資源管理類會對資源進行封裝,資源本身被保護在資源管理類中,但有時候你要活得原始的資源,可能就需要用類似get()這樣的函數,但是有些情境下可能導致頻繁地使用get()等函數,因此這個時候重載一下類型轉換是個不錯的選擇()

這個方法來自《Effective C++》的條款15。這本書相當不錯,尤其是一些程式設計的思想,會有讓人“啊哦!”的感覺

如果文中哪裡有問題,還請指出~!




相關文章

聯繫我們

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