C 中過載 或 運算子

2021-06-15 08:57:50 字數 659 閱讀 7406

c++中過載單目運算子時,會出現前置和後置的問題。如++和--等。例如:

const num &operator++() // 前置

const num operator++(int o) // 後置

上面這個++運算子的過載了兩次,乙個是前置的,乙個是後置的。上面兩者的區別有:

1、過載的前置++返回乙個引用,而過載的後置++返回乙個const值(這一點要特別注意)。為什麼後置的++不返回乙個引用呢?這是因為後置的++的函式體內新建了乙個臨時物件,用當前物件對其初始化。而當前物件可能為空值,所以初始化後的臨時物件可能為空值。但是,我們知道引用是不能為空的。所以我們不能將後置的++的返回值定義為引用型別。同時,結合前置++和後置++在運算時的區別來理解。

2、前置的++的引數列表是空,而後置的++的引數列表不為空,有一整型引數。恰恰是利用這個整型引數,使編譯器來區分++是前置還是後置。帶有整型引數的++是後置的,沒有的是前置的。但是對於這個整型引數,我們不會使用到它。

當我們執行如下語句時:

++i ; // 呼叫前置++

i++ ; // 呼叫後置++

至於為什麼++i呼叫的是前置的++而i++卻呼叫的後置的++,這個由編譯器去識別。我們要做的就是在過載時區分前置++和後置++。

C 中運算子過載

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

C 中運算子過載

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

C 運算子過載 過載特殊運算子

賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...