重載運算子

C++基本資料型態(int、float等)可以使用運算子進行運算,如果要在自己建立的物件上使用這些運算子,比如兩個物件相加,預設上是不可行的。然而某些情況下,我們會想要將兩個物件的某些屬性值相加,並傳回運算後的結果,例如我們定義了Point2D類別,代表物件的座標,當中有m_x與m_y兩個成員變數,我們想要透過+或-運算子,得到座標相加或相減的動作,這時可以透過重載運算子來達到目的。

運算子的重載其實是函式重載的一個延伸應用,指定要重載哪一個運算子,並在類別中定義如何動作,以下為運算子重載的方式,其中#指明要重載哪一個運算子,假如想重載+運算子,#處就替換為+運算子。
回傳型態 類別名稱::operator#(參數列){
//實作重載內容
}

以下為實作:

class Point2D { 
public: 
    int m_x;
    int m_y;
    Point2D(int, int);
    Point2D operator+(const Point2D &add);
    Point2D operator-(const Point2D &minus);
}; 

int main() {
    Point2D p1(2, 7);
    Point2D p2(5, 3);
    Point2D p3 = p1 + p2; 

    int x = p3.m_x;  //x=7
    int y = p3.m_y;  //y=10
    return 0;
}

Point2D::Point2D(int x, int y) {
    m_x = x;
    m_y = y;
}
Point2D Point2D::operator+(const Point2D &p) { 
    Point2D tmp(m_x + p.m_x, m_y + p.m_y); 
    return tmp; 
} 
Point2D Point2D::operator-(const Point2D &p) { 
    Point2D tmp(m_x - p.m_x, m_y - p.m_y); 
    return tmp; 
}