`
swincle
  • 浏览: 76536 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Operators

    博客分类:
  • C++
 
阅读更多

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

相关推荐

Global site tag (gtag.js) - Google Analytics