C 中的運算子過載

2021-09-07 20:06:51 字數 1525 閱讀 2344

在c++中,函式過載有兩種方式:

bool operator ==(const node &node)
bool operator<(const node &a, const node &b)
除了手動過載這些函式,還可以使用模板函式進行快速過載,就像c#中的擴充套件方法和go裡面的struct一樣給class插上「翅膀」。方法是:使用utility中的rel_ops命名空間。

這個命名空間實現了以下模板函式:

namespace rel_ops
如上所示,rel_ops命名空間實現了四種運算子,我們只需要自己實現==<兩個運算子就能夠實現以上四種運算子了。

請看乙個完整的例子。

#include#includeusing namespace std;

class node

bool operator ==(const node &node)

};bool operator<(const node &a, const node &b)

int main()

還有乙個關鍵之處:左移運算子和移位運算子都是<<,但是因為它們接受的引數不一樣,所以可以同時過載。

#include using namespace::std;

class myclass

void print_myclass()

//輸出運算子和左移運算子雖然樣子一樣,但是引數不一樣,所以相當於運算子過載

friend ostream & operator<<(ostream &os, myclass &c);

myclass operator<<(int cnt)

private:

int a;

int b;

};//使用友元訪問私有變數

ostream & operator<<(ostream &os, myclass &c)

void main()

雖然移位運算子正常情況下接受的引數是int,表示移位的個數,但實際上這個引數可以是任何型別,移位運算子完全由使用者掌控,但是有兩點需要注意:

myclass operator<<(double cnt)
c++中可以過載的運算子包括

+   -   *   /   %   ^   &   |   ~

! = < > += -= *= /= %

^= &= |= << >> >>= <<= == !=

<= >= && || ++ -- ->* 『 ->

() new delete new delete

不能過載的操作符是類屬關係運算子 如:

.   ::   .* ?:  sizeof

C 中運算子過載

運算子過載使得使用者自定義的資料以一種更簡潔的方式工作。比如int x,y 可以為y x y 而 my c1,c2 如果想使得兩個自定義的物件相加,以前只能調 用函式計算它們的和。而現在只要定義了運算子過載就能實現c1 c1 c2.所謂過載,就是重新賦予新的含義。函式過載就是對乙個已有的函式賦予新的...

C 中運算子過載

運算子過載可以寫在類的內部,也可以寫成全域性函式形式,其中運算子 在過載時必須宣告為類的成員函式 而運算子 sizeof 不能被過載 演算法運算子的過載不會改變運算子原有的優先順序。例子 include include include using namespace std class comple...

C 中的運算子過載(一) 運算子過載的概念

概述 運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。運算子過載 operator overloading 只是一種 語法上的方便 也就是它只是另一種函式呼叫的方式,只是為了方便我們使用,運算子只能運算內建的資料型別,對於自定義的資料型別不能運算,所以我們可以過載...