close

針對C++運算子多載  真的是頭大

今天寫了一個範例  怕自己忘記

運算子多載 會依照所寫的符號 去尋找對應的函數

實際上顯示的內容及運作還是要靠實作,  使用何種多載運算子符號與實作並不影響 

符號只是找函數使用  例如在類別宣告  operator+()    定義函數時 也要寫上對應的operator+() 不然會找不到

內容如果寫成   以下形式,計算就會依照函數體內的內容進行計算,不會受到operator+()的  +所影響。

ken ken::operator+(const ken p) {              // operator 符號為  +                                                                                                                          
    a/=p.a;                                                    //  符號為  /=
    b/=p.b;
    return *this;
}

引數也可使用  &     //(const ken &)  但函數宣告和定義都需要一致才行   

函數宣告   ken operator/=(const ken &);  

函數定義   ken ken::operator/=(const ken &p)

                {
                         a/=p.a;
                         b/=p.b;
                         return *this;
                 }

 

就像函數多載一樣 ,就算函數外的operator運算符號和內部實作是兩碼事,  

實作和內容最好相符   不然到時候可是會大混亂喔

 

#include "stdafx.h"
#include <iostream>

class ken {
public:
    int a;
    int b;
    ken(int k, int t) { a = k, b = t; }    //函式建構式
    ken operator/=(const ken);  
};

int main() {
    

    ken a1(8,6);
    ken a2(4,3);
    a1/=a2;


    std::cout << a1.a << std::endl;
    std::cout << a1.b << std::endl;

    system("pause");

    return 0;
}

ken ken::operator/=(const ken p) {
    a/=p.a;
    b/=p.b;
    return *this;
}

arrow
arrow
    文章標籤
    程式設計
    全站熱搜
    創作者介紹
    創作者 HinotsukiSky 的頭像
    HinotsukiSky

    夢に繋がる糸

    HinotsukiSky 發表在 痞客邦 留言(0) 人氣()