網頁

C++ 速查手冊 V1.00 - 單元 9.16 - 多載運算子




運算子可依類別的需要進行多載 (overload) ,舉例如下


001 #include <iostream>
002
003 class Demo {
004 public:
005    Demo() {
006       a = 1;
007       b = 1;
008    }
009
010    Demo(int pa, int pb) {
011       a = pa;
012       b = pb;
013    }
014
015    Demo operator+(const Demo& p) {
016       Demo demo;
017       demo.a = this->a + p.a;
018       demo.b = this->b + p.b;
019
020       return demo;
021    }
022
023    void do_something() {
024       std::cout << a + b
025                 << std::endl;
026    }
027
028 private:
029    int a;
030    int b;
031     
032 };
033
034 int main() {
035    Demo d1(2, 6);
036    d1.do_something();
037    Demo d2(10, 24);
038    d2.do_something();
039    Demo d3;
040    d3 = d1 + d2;
041    d3.do_something();
042
043    return 0;
044 }
045  
046 /* Kaiching Chang 
047    u0916.cpp
048    2014-02 */

運算子多載在第 15 行, operator 後面接上要重載的運算子,另外要有 const 的參考參數,表示運算子後面的運算元 (operand)


015 Demo operator+(const Demo& p) {
016    Demo demo;
017    demo.a = this->a + p.a;
018    demo.b = this->b + p.b;
019
020    return demo;
021 }

編譯執行,結果如下


$ g++ u0916.cpp
$ ./a.out
8
34
42
$

continue ...

沒有留言:

張貼留言

0.留言請選擇註冊帳號, Google 或 OpenID 均可
1.歡迎留言交流,但不歡迎垃圾留言及廣告留言
2.文章相關問題歡迎提出,請減少情緒性留言
3.非文章相關內容,請到 G+ 社群 FB 社團提出
4.問作業之留言會被直接刪除
5.莫忘網路禮節
6.可使用部份HTML標記,如 <b> 、 <i> 、 <a>
7.站長保留刪除留言的權力