重载运算符
重载运算符
这篇随笔我来讲解一下C++语言中重载运算符的相关知识。
一、重载运算符的用途
这是一个比较哲学的问题:我们为什么要重载运算符?
理由就是,我们C++语言中已经给出的运算符(包括算数运算符和逻辑运算符)只是针对C++语言中已经给定的数据类型进行运算,假如我们想要对我们的自定义数据类型进行运算的话,则需要重载运算符,我们可以把重载运算符理解成对已有的运算符的一种重新定义。
比如:
double a,b,c;
a=1/3;
b=1/2;
c=a+b;
printf("%lf",c);
这段程序输出的肯定不是两个分数相加的结果。
这时候我们就可以重载运算符+。
二、重载运算符的实现
语法格式如下(非常重要)
<返回类型> operator <运算符符号>(<参数>)
{
<定义>;
}
这里我们举一个例子。
在优先队列(priority_queue)中,存储的元素较大的会被放到堆顶。如果存的是int或者string等类型还好办(因为他们本身就可以互相比较大小),如果是我们自定义的结构体类型,那就需要重载<运算符。
比如:
struct node
{
int id;
double x,y;
}//定义结构体
bool operator <(const node &a,const node &b)
{
return a.x<b.x && a.y<b.y;
}//重载运算符“<”
注:这里的结构体保存了一个整型变量id,两个长浮点变量x,y,表示坐标。
这里的重载运算符先比横坐标后比纵坐标。
三、重载运算符的注意事项。
以下运算符不可重载:
关系运算符"."
成员指针运算符".*"
作用域运算符"::"
sizeof运算符
三目运算符"?:"
重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。
运算符重载实质上是函数重载。