重载运算符

重载运算符

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

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

posted @ 2022-02-11 20:57  PassName  阅读(167)  评论(0编辑  收藏  举报