C++把操作符也看成是与函数同样性质的实体,因此可以对操作符进行函数哪样的定义。例如:
#include<iostream> using namespace std; class Point { int x, y; public: void set(int a, int b) { x = a; y = b; } void print() const { cout << "(" << x << ", " << y << ")\n"; } //friend声明后函数体中可以访问Point的私有数据 friend Point operator + (const Point &a, const Point &b); //“+”在匹配了某种类型的实参后便可以被编译理解成确定的行为 friend Point add(const Point &a, const Point &b); //add函数与+操作符的功能完全一致 }; Point operator + (const Point &a, const Point &b) { Point s; s.set(a.x + b.x, a.y + b.y); return s; } Point add (const Point &a, const Point &b) { Point s; s.set(a.x + b.x, a.y + b.y); return s; } int main() { Point a, b; a.set(3,2); b.set(1,5); (a + b).print(); //编译时转译为对operator + (a, b)的调用 operator + (a, b).print(); add(a, b).print(); }
Some characters or restraints about operator:
①不能创造新的操作符;
②::/./.*/?:这些操作符不能重载;
③操作符优先级不变;
④操作数个数不变;
⑤在操作符定义的参数表中,至少有一个参数必须是自定义类型;
⑥应与操作意义相符;
Increment operators
int a = 1, b = 1, c = 1, d = 1; (++a) ++; //a = 3,函数定义为 X& operator ++ (X &a); (b++) ++; //b = 2,函数定义为 X operator ++ (X &a, int b);其中参数int b是为区分前增量函数所设置的