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;//高精度就可以这么写,注意不能+=,编译通不过。
重载运算符是个好东西,本人的最爱。
相关文章推荐
- C++容器类是什么意思? 简单易懂
- 区块链是什么?如何简单易懂地介绍区块链?
- 如何用简单易懂的例子解释隐马尔可夫模型?
- C++拷贝构造函数(深拷贝,浅拷贝)[难得一篇写得很易懂的C++文章]
- 区块链是什么,如何简单易懂地介绍区块链?
- C++的杂七杂八:如何实现一个简单的bind
- C++多态是如何实现的——一个简单明晰的例子告诉你!
- C#如何制作水晶报表简单易懂示例 转
- C++如何实现简单的计时器详解
- 如何使电商APP制作变得简单易懂,容易上手?
- 如何用简单易懂的例子解释隐马尔可夫模型?
- (读书笔记)《玩着玩着就能成为PPT高手》——如何制作一个简单易懂的PPT
- 虚拟机安装Ubuntu如何连接校园网(简单易懂)
- 用C++实现七种排序算法,可选择排序方法,简单易懂。
- C++简单类中如何书写Makefile(二)
- [置顶] 区块链是什么,如何简单易懂地介绍区块链?
- 转载一篇C++如何调用C#的文章
- 简单易懂实例说明如何设计子网掩码
- C#如何制作水晶报表简单易懂示例
- 如何写简单易懂的技术博客