重载运算符语法讲解

心不动则不痛 提交于 2019-11-25 23:02:34

重载运算符

这篇随笔我来讲解一下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++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。

运算符重载实质上是函数重载。

好了,关于重载运算符的基本知识基本已经被科普完了,这是C++语言程序设计中非常非常常见的一种操作手段。请大家务必重视并用大量例题熟练掌握。

下课~祝同学们AK IOI!!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!