来自http://blog./insistgogo/article/details/6626952什么是运算符的重载? 运算符与类结合,产生新的含义。 为什么要引入运算符重载? 作用:为了实现类的多态性(多态是指一个函数名有多种含义)怎么实现运算符的重载?方式:类的成员函数或友元函数(类外的普通函数)规则:不能重载的运算符有. 和.*和?:和:: 和sizeof友元函数和成员函数的使用场合:一般情况下,建议一元运算符使用成员函数,二元运算符使用友元函数 1、运算符的操作需要修改类对象的状态,则使用成员函数。如需要做左值操作数的运算符(如=,+=,++) 2、运算时,有数和对象的混合运算时,必须使用友元 3、二元运算符中,第一个操作数为非对象时,必须使用友元函数。如输入输出运算符<<和>>具体规则如下:运算符建议使用所有一元运算符成员函数=()[] ->必须是成员函数+=-=/=*=^=&=!=%=>>=<<=,,例如:–,+,*,/友元函数<<>> 当参数不会被改变,一般按const引用来传递(若是使用成员函数重载,函数也为const). 对于返回数值的决定: 1)如果返回值可能出现在=号左边,则只能作为左值,返回非const引用。 2)如果返回值只能出现在=号右边,则只需作为右值,返回const型引用或者const型值。 3)如果返回值既可能出现在=号左边或者右边,则其返回值须作为左值,返回非const引用。运算符重载举例:+和-运算符的重载:[cpp] viewplaincopyprint?class Point { private: int x; public: Point(int x1) { x=x1;} Point(Point& p) { x=;} const Point operator+(const Point& p);//使用成员函数重载加号运算符 friend const Point operator-(const Point& p1,const Point& p2);//使用友元函数重载减号运算符 }; const Point Point::operator+(const Point& p) { return Point(x+); } Point const operator-(const Point& p1,const Point& p2) { return Point(-); } 调用:[cpp] viewplaincopyprint?Point a(1); Point b(2); a+b; //正确,调用成员函数 a-b; //正确,调用友元函数 a+1; //正确,先调用类型转换函数,把1变成对象,之后调用成员函数 a-1; //正确,先调用类型转换函数,把1变成对象,之后调用友元函数 1+a; //错误,调用成员函数时,第一个操作数必须是对象,因为第一个操作数还有调用成员函数的功能 1-a; //正确,先类型转换 后调用友元函数 总结:1、由于+-都是出现在=号的右边,如c=a+b,即会返回一个右值,可以返回const型值2、后几个表达式讨论的就是,数和对象混合运算符的情况,一般出现这种情况,常使用友元函数3、双目运算符的重载: 重载运算符函数名:operator@(参数表) 隐式调用形式:obj1+obj2 显式调用形式:+(OBJobj2)---成员函数 operator+(OBJobj1,OBJobj2)---友元函数 执行时,隐式调用形式和显式调用形式都会调用函数operator+()++和--运算符的重载:[cpp] viewplaincopyprint?class Point { private: int x; public: Point(int x1) { x=x1;} Point operator++();//成员函数定义自增 const Point operator++(int x); //后缀可以返回一个const类型的值 friend Point operator--(Po
运算符的重载 来自淘豆网www.taodocs.com转载请标明出处.