1.什麼是操作符重載
可以使用分詞將操作符重載理解為:操作符+重載。
C++中的操作符很多,如+,-,*,\等等。
C++中的重載也是C++中物件導向多態的體現。
簡單說操作符重載:
C++中有:int a=2+3; 那麼a=5
操作符重載可以實現對自訂類型的操作:
#include <iostream>using namespace std; class Point{public: int x; int y; Point(int _x,int _y):x(_x),y(_y){ } Point operator+(Point &p){ int t1=this->x+p.x; int t2=this->y+p.y; Point t(t1,t2); return t; }}; int main(){ Point p1(1,3); Point p2(2,6); Point p3 = p1+p2; cout<<"p3:("<<p3.x<<","<<p3.y<<")"; ///執行輸出:p3:(3,9) return 0;}
2.操作符重載的方式
操作符重載的實現方式有兩種,即通過“友元函數”或者“類成員函數”。如下面代碼顯示了這兩種操作符重載:
class Point{public: int x; int y; Point(int _x,int _y); Point operator+(Point &p); ///類成員函數,類成員函數可以使用this指標擷取自身對象 friend int operator*(Point &p1,Point &p2); ///友元函數};
可以看出,一個重載“+”,一個重載“*”,都是雙目運算子,但是類成員函數只有一個參數。這是因為類成員函數可以使用this指標擷取自身的對象,而友元函數則不行。
所以類成員實現操作符重載需要的形式參數比原來少一個,這樣使用類成員函數實現一元操作符就不需要參數了。
3.操作符重載例子
#include <iostream>using namespace std; class Point{public: int x; int y; Point(int _x,int _y):x(_x),y(_y){ } Point operator+(Point &p){ ///實現座標向量加 int t1=this->x+p.x; int t2=this->y+p.y; Point t(t1,t2); return t; } friend int operator*(Point &p1,Point &p2); ///實現內積}; int operator*(Point &p1,Point &p2){ return (p1.x*p2.x)+(p1.y*p2.y);} int main(){ Point p1(1,3); Point p2(2,6); cout<<p1*p2<<endl; ///輸出內積:20 Point p3 = p1+p2; cout<<"p3:("<<p3.x<<","<<p3.y<<")"<<endl; ///輸出座標和:(3,9) return 0;}