关于重载运算符

关于C++中的重载运算符

学习博客1
学习博客2
记得很久以前学\(Dijkstra\)的堆优化的时候\(gxb\)神仙给我讲过,当时就是不明白感受\(gxb\)都要崩溃了的亚子,好歹算是知道了,可是随着时间的流逝,他居然趁我不注意从我脑子里跑了!\(gxb\)正拿着刀在赶来的路上html

咱们能够重定义或重载\(C++\)内的大部份内置运算符。node

能够重载的运算符:
+ - * / %
! = < > +=
^= &= |= << >>
<= >= && || ++
[] () new delete new[]
不能重载的运算符
. :: .* ?: sizeof

\(\color{red}{重载的运算符是带有特殊名称的函数,函数名是由关键字operator和其后要重载的运算符符号构成的。 }\)
与其余函数同样,重载运算符有一个返回类型和参数列表函数

Node operator<(const Node &n);

声明把小于号这个运算符用于把两个\(Node\)对象比较大小,返回最终的\(Node\)对象。学习

知识储备(主要是概念):

成员函数:假设咱们定义一个结构体\(student\),这个结构体里有\(age,score\)等,而这个\(age,score\)就是成员函数(我的理解,若是有误欢迎指正)优化

大多数的重载运算符能够被定义为普通的非成员函数(就是咱们平时写的各类函数)或者被定义为类成员函数。spa

若是咱们定义上面的函数为类的非成员函数,很明显的,因为要比较因此咱们须要穿两个参数给他。code

Node operator<(const Node a,const Node b)

相应的若是咱们要把他定义为一个成员函数(这里贴一下\(Dijkstra\)的结构体里的重载运算符)
由于priority_queue q;自定义的是大根堆而咱们须要一个小根堆来实现咱们的贪心因此重载一下运算符
写法一:
htm

struct Node {
    int u, v;
    friend bool operator<(const Node a, const Node b){
        return a.u > b.u;
    }
};

\(friend\)是友元函数,什么是友元函数我也不知道反正\(lfd\) 跟我说不用学,还说这个东西能够用来装\(b\),可是若是用很差会\(CE\)很长时间。
写法二:对象

struct Node {
    int u, v;
    bool operator<(const Node &b) const {
        return u > b.u;
    }
};

谢谢收看,祝身体健康!blog

相关文章
相关标签/搜索