Operators

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是为区分前增量函数所设置的
 

你可能感兴趣的:(Opera)