运算符重载简介
所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。同样运算符重载(Operator Overloading)可以让同一个运算符可以有不同的功能。
格式
C++ 规定,下标运算符[ ]必须以成员函数的形式进行重载。该重载函数在类中的声明格式如下:
返回值类型 & operator[ ] (参数);
const 返回值类型 & operator[ ] (参数) const;
使用第一种声明方式,[ ]可以访问元素,还可以修改元素。使用第二种声明方式,[ ]只能访问不能修改元素
规则
不能重载的运算符有 . 和 .* 和 ?: 和 :: 和 sizeof
友元函数和成员函数的使用场合:一般情况下,建议一元运算符使用成员函数,二元运算符使用友元函数
1、运算符的操作需要修改类对象状态,使用成员函数。如需要做左值操作数的运算符(如=,+=,++)
2、运算时,有数和对象的混合运算时必须使用友元
3、二元运算符中,第一个操作数为非对象时,必须使用友元函数。如输入输出运算符<<和>>
具体规则如下:
运算符重载的两种方法类内重载
#includeusing namespace std; class Point { public: Point(){}; Point (int x, int y): x(x),y(y) {}; Point operator+(const Point &b) { //类内重载,运算符重载函数作为类的成员函数 Point ret; ret.x = this->x + b.x; ret.y = this->y + b.y; return ret; } int x,y; }; int main() { Point a(2,4),b(5,3); Point c = a + b; //这里c++编译器会,自动去找 + 运算符的重载函数 cout<< "x :" << c.x << endl; cout<<"y :" << c.y << endl; }
双目运算符的重载:
重载运算符函数名:operator@(参数表)
隐式调用形式:obj1+obj2
显式调用形式:obj1.operator+(OBJ obj2)---成员函数
operator+(OBJ obj1,OBJ obj2)---友元函数
执行时,隐式调用形式和显式调用形式都会调用函数operator+()
类外重载(用友元函数的方法实现)
#includeusing namespace std; class Point { public: Point(){}; Point (int x, int y): x(x),y(y) {}; friend Point operator+(const Point &, const Point &); //声明类的友元函数 int x,y; }; Point operator+(const Point &a,const Point &b) {//类外重载,运算符重载函数作为类的友元函数 Point ret; ret.x = a.x + b.x; ret.y = a.y + b.y; return ret; } int main() { Point a(2,4),b(5,3); Point c = a + b; cout<< "x :" << c.x << endl; cout<<"y :" << c.y << endl; }



