Welcome

首页 / 软件开发 / C++ / C++的操作符重载概述

C++的操作符重载概述2014-11-111.什么是操作符重载

可以使用分词将操作符重载理解为:操作符+重载。

C++中的操作符很多,如+,-,*,等等。

C++中的重载也是C++中面向对象多态的体现。

简单说操作符重载:

C++中有:int a=2+3; 那么a=5

操作符重载可以实现对自定义类型的操作:

#include <iostream>using namespace std;class Point{public:int x;int y;Point(int _x,int _y):x(_x),y(_y){}Point operator+(Point &p){int t1=this->x+p.x;int t2=this->y+p.y;Point t(t1,t2);return t;}};int main(){Point p1(1,3);Point p2(2,6);Point p3 = p1+p2;cout<<"p3:("<<p3.x<<","<<p3.y<<")"; ///执行输出:p3:(3,9)return 0;}
2.操作符重载的方式

操作符重载的实现方式有两种,即通过“友元函数”或者“类成员函数”。如下面代码显示了这两种操作符重载:

class Point{public:int x;int y;Point(int _x,int _y);Point operator+(Point &p);///类成员函数,类成员函数可以使用this指针获取自身对象friend int operator*(Point &p1,Point &p2);///友元函数};
可以看出,一个重载“+”,一个重载“*”,都是双目运算符,但是类成员函数只有一个参数。这是因为类成员函数可以使用this指针获取自身的对象,而友元函数则不行。

所以类成员实现操作符重载需要的形式参数比原来少一个,这样使用类成员函数实现一元操作符就不需要参数了。

3.操作符重载例子

#include <iostream>using namespace std;class Point{public:int x;int y;Point(int _x,int _y):x(_x),y(_y){}Point operator+(Point &p){///实现坐标向量加int t1=this->x+p.x;int t2=this->y+p.y;Point t(t1,t2);return t;}friend int operator*(Point &p1,Point &p2);///实现内积};int operator*(Point &p1,Point &p2){return (p1.x*p2.x)+(p1.y*p2.y);}int main(){Point p1(1,3);Point p2(2,6);cout<<p1*p2<<endl;///输出内积:20Point p3 = p1+p2;cout<<"p3:("<<p3.x<<","<<p3.y<<")"<<endl; ///输出坐标和:(3,9)return 0;}