#include<iostream>#include<cstdio>#include<cstdlib>#include<queue>#include<stack>#include<algorithm>#include<string>#include<map>#include<set>#include<vector>usingnamespace std;classPoint{public:Point();Point(int x,int y);//类内重载
Point operator+(const Point &);
Point &operator+=(int);intoperator[](string);intgetX(){return x;}intgetY(){return y;}private:friend Point operator+(const Point &,const Point &);friend ostream &operator<<(ostream &,const Point &);int x, y;};classPPoint{public:PPoint(Point *p):p(p){}
Point *operator->(){return p;}private:
Point *p;};classADD{public:ADD(int c):c(c){}intoperator()(int a,int b){return a + b + c;}private:int c;};//委托构造函数Point::Point():Point(0,0){}Point::Point(int x,int y):x(x),y(y){}//数组对象int Point::operator[](string s){if(s =="x")return x;if(s =="y")return y;return0;}
ostream &operator<<(ostream &out,const Point &a){
out <<"("<< a.x <<","<< a.y <<")";return out;}
Point &Point::operator+=(int n){
x += n, y += n;return*this;}//类内重载
Point Point::operator+(const Point &a){
cout <<"inner operator+"<< endl;
Point c(x + a.x, y + a.y);return c;}//类外重载
Point operator+(const Point &a,const Point &b){
cout <<"outer operator+"<< endl;
Point c(a.x + b.x, a.y + b.y);return c;}intmain(){
ADD add(5);//仿函数,可调用对象
cout <<add(6,7)<< endl;
Point a(3,4);
Point b(7,9);
cout << a["x"]<< endl;//数组对象
cout << a["y"]<< endl;
Point c = a + b;
cout << a << endl;
cout << b << endl;
cout << c << endl;(a +=3)+=2;//x和y统一加上3,再加上2
cout << a << endl;
PPoint p =&a;
cout << p->getX()<<" "<< p->getY()<< endl;return0;}
输出
1834
inner operator+
(3,4)(7,9)(10,13)(8,9)89
struct形式类外重载
#include<iostream>#include<string>usingnamespace std;structPoint{int x;int y;};structVector{int x;int y;};
Vector operator+(Vector a, Vector b){return Vector{a.x + b.x, a.y + b.y};}
Point operator+(Point a, Vector b){return Point{a.x + b.x, a.y + b.y};}
Point operator+(Vector a, Point b){return Point{a.x + b.x, a.y + b.y};}intmain(){
Point a{1,2};
Vector b{3,4};auto x = b + b;
cout <<"b + b = {"<< x.x <<", "<< x.y <<"}"<< endl;auto y = a + b;
cout <<"a + b = {"<< y.x <<", "<< y.y <<"}"<< endl;auto z = b + a;
cout <<"b + a = {"<< z.x <<", "<< z.y <<"}"<< endl;return0;}