friend函式重載運算子

使用類別成員來重載二元運算子時,可以具有以下的功能:
Point p1(10, 10);
Point p2;
p2 = p1 + 10;

但是使用類別成員重載,運算子的左邊一定要是原物件,無法具有以下的功能:
Point p1(10, 10);
Point p2;
p2 = 10 + p1;

這時可以使用friend函式來重載運算子,使用friend函式重載二元運算子,指定兩個參數型態,分別表式運算子左右邊的運算元型態,藉由兩個函式來解決以上的問題。

<

pre>class Point{
public:
int m_x;
int m_y;

Point();
Point(int x, int y);
friend Point operator+(const Point&, int); 
friend Point operator+(int, const Point&);  

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

int main(){
Point point1(5, 3);
Point point2 = point1 + 2;
return 0;
}