運算子過載的幾條注意點和兩種方式

2021-08-15 09:38:53 字數 1063 閱讀 5018

寒假心有點飄,特別懶,能拖就拖。。。兩天沒做完一道題。有點點~~~過分~~~

後來在寫優先佇列時,過載運算子就出現了毛病。以前只知道這麼寫,不知道原理,慢慢時間一長就忘記了。於是今天特意研究了一下運算子的過載。

首先。必須知道一件事。在stl庫裡面,有很多函式原型和運算子原型。用成員方式在進行運算子過載時,需要了解引數個數。運算子過載前後引數個數必須一致。比如對於乙個二元運算子只需要乙個引數

拿個例子說吧:

template

struct less : public binary_function<_tp, _tp, bool>    

else

return a.weight>b.weight;

} /*bool operator < (const huffman a) const

huffman(char ch,int weight)

huffman()

};附上哈夫曼樹的構造方法:

#include#include#include#includeusing namespace std;

struct huffman

};int main()

huffman x,y,z;

while(!h.empty())//huffman每次迴圈彈出最小與次小的節點

{x = h.top();

h.pop();

if(h.empty())//迴圈結束佇列中只應該存在一顆樹而不是森林

break;

y = h.top();

z.data = y.data+x.data;//父節點的值等於兩個子節點之和

z.left=&x;

cout<<"左子樹為:"priority_queue,greater>que;                 //公升序排列,即最小優先

priority_queue,less>que;                      //降序排列,即最大優先,其實優先佇列預設就是最大優先

運算子過載 的注意

操作符過載函式不能為友元函式,只能為某類中的成員函式.假如將賦值運算子過載為dog類的友元 friend dog operator dog d1,dog d2 例如有表示式 x y 可以正確的將y賦值給x x,y都是dog類的物件。又例如有一表示式99 y 它被解釋為operator 99,y c ...

運算子過載的注意事項

在 c 中進行運算子過載時的注意事項 c 規定,運算子過載不改變運算子的優先順序。以下運算子不能被過載 sizeof 過載運算子 賦值運算子 和型別強制轉換運算子 時,只能將它們過載為成員函式,不能過載為全域性函式。必要時需要過載賦值運算子 即進行深拷貝,以避免兩個物件內部的指標指向同一片儲存空間。...

C 高階程式設計 運算子過載的兩種方法

二元運算子 一元運算子 例如3 前置 操作符 用全域性函式實現 complex operator complex c1 呼叫方法 c1 需要寫出操作符過載函式原形 c1.printcom 運算子過載函式名定義 首先承認操作符過載是乙個函式 定義函式名 operator 分析函式引數 根據左右運算元的...