您的位置:首页 > 编程语言 > C语言/C++

C++ 如何重载运算符 —— 一篇简单易懂的博文

2018-03-01 20:00 197 查看

C++ 重载运算符

重载运算符在很多地方要用到,而且很方便,虽然没有直接写cmp快,但是用途比cmp广泛很多。

首先我们看一个模板:

struct (名称){
变量
类型 operator 符号(const 名称 变量)const{(返回计算的值)}
}


可能比较难懂,下面举个例子:

struct ad{
int x,y;
bool operator <(const ad b)const{return x<b.x||x==b.x&&y<b.y;}
//在排序时直接sort(a+1,a+1+n);就可以了。
//这是以x为第一关键字,y为第二关键字的排序。
}a[MAXN];


PS:基本上像STL里的堆、排序等等都是重载小于号,而不是大于号。

当然,重载运算符还有一种用法,比如重载[]。

举个例子,C++里数组下标不能为负,所以有负数下标的情况下还得加上个N,烦并且容易错。

那么就可以重载[]。

struct ad{
int a[2*MAXN];//范围-MAXN~MAXN。
int &operator [](const int b){return a[b+MAXN];}
}fa;


举一例:fa[−10]==fa.a[−10+MAXN]fa[−10]==fa.a[−10+MAXN]//这两个是相等的

是不是很方便,所以重载运算符是个好东西。

高精度也可以重载运算符。

struct ad{
int a[1005],len;
ad(){memset(a,0,sizeof(a));len=0;}
ad(int x){
len=0;memset(a,0,sizeof a);
while (x) a[++len]=x%TT,x/=TT;
}
ad operator +(const ad b){
ad  c;
c.len=max(len,b.len);
for (int i=1;i<=c.len;i++){
c.a[i]+=a[i]+b.a[i];
c.a[i+1]+=c.a[i]/TT;
c.a[i]%=TT;
}
if (c.a[c.len+1]) c.len++;
return c;
}
}
ans=ans+b;//高精度就可以这么写,注意不能+=,编译通不过。


重载运算符是个好东西,本人的最爱。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: