C 中的運算子過載

2021-10-02 03:23:29 字數 731 閱讀 7765

運算識別符號作為詞法分析器的token,不能動態新增,編譯時無法識別其他未被lexer定義的運算子token,而過載已有的運算子只是在給token解析新增語義動作時,指明符號的呼叫指向而已,所以,繫結運算子的動作是可以動態的,但是,區分token的單位是在詞法分析器裡寫死的,固定的。

同時,結合性和優先順序是語法分析層次上固定寫死的,靜態的,不可改變。

(猜想,未證實)

主要是用 operator 關鍵字來表達區分

單目運算子

表示式**呼叫

過載函式編寫

a++a.operator ++(0)

datatype operator ++(int)

++aa.operator ++()

datatype operator ++()

雙目運算子

表示式**呼叫

過載函式編寫

a << b

a.opearator<<(b)

datatype operator << (const datatype & b)

三目運算子

尚未知在類內寫成員函式進行運算子過載

在類外寫非成員函式進行運算子過載

與類內區別,以a+b為例,因為在類外,所以沒有類域的this可以呼叫,故過載傳參需要傳 運算數和運算元

所以 a + b 便可以 用 datatype operator + (const datatypea &a , const datatypeb &b )

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 只是一種 語法上的方便 也就是它只是另一種函式呼叫的方式,只是為了方便我們使用,運算子只能運算內建的資料型別,對於自定義的資料型別不能運算,所以我們可以過載...