运算符重载

来源:互联网 发布:淘宝拍卖和个人闲置 编辑:程序博客网 时间:2024/05/29 06:57

运算符重载

性质:

1 不能创建新的操作符。

2 双目操作符“::”、“.”、和“.*”不能重载。

3 c++的操作符都是有优先级和结合性的,重载操作符后,其优先级和结合性是不会改变的。

4 原先的操作符是单目的,重载也是单目形式的;原先操作符是双目的,重载也是双目的,这是不能改变的。

5 操作符的重载只能针对自定义类型。即,在操作符定义的参数表中,至少有一个参数必须是自定义类型。

6 忌意义相左。

常成员函数

成员函数的操作,如果只对对象进行读操作,则该成员函数可以设计为常(const )成员函数。设计为常成员函数的好处是,让使用者一目了然地知道该成员函数不会改变对象值。同时让类的实现者更方便地调试,因为在常成员函数中,任何改变对象值的操作,都将被编译器毫不留情地认定为错误。

举例:

矢量类的加法

#include<iostream>using namespace std;class Point{private:int x, y;public://成员函数void set(int a, int b){ x=a, y=b; }//常成员函数void print()const{  cout<<"("<<x<<", "<<y<<")\n"; }//设置为友元函数以便访问私有成员friend Point operator+(const Point& a, const Point& b);//设置为友元函数以便访问私有成员friend Point add(const Point& a, const Point& b);};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,1);b.set(4,5);//方法一(a+b).print();//方法二operator+(a,b).print();//方法三add(a, b).print();return 0;}


0 0