關於重載運算符

關於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

相關文章
相關標籤/搜索