寒假心有點飄,特別懶,能拖就拖。。。兩天沒做完一道題。有點點~~~過分~~~
後來在寫優先佇列時,過載運算子就出現了毛病。以前只知道這麼寫,不知道原理,慢慢時間一長就忘記了。於是今天特意研究了一下運算子的過載。
首先。必須知道一件事。在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 分析函式引數 根據左右運算元的...