本文是譚浩強老師c++程式設計第十章的總結,涉及運算子的過載。
運算子過載是定義乙個過載運算子的函式,使指定運算子不僅能實現原有功能,還能實現函式中指定的新功能,運算子過載實質上是函式的過載,一般格式如下:
函式型別 operator 運算子名稱(形參表)
如:想將「+」用於complex類(假設已定義的複數類)的加法運算,函式原型可以如下定義:
complex operator + (complex& c1, complex& c2);
下面是可過載的運算子列表:
雙目算術運算子
+ (加),-(減),*(乘),/(除),% (取模)
關係運算子
==(等於),!= (不等於),< (小於),> (大於》,<=(小於等於),>=(大於等於)
邏輯運算子
||(邏輯或),&&(邏輯與),!(邏輯非)
單目運算子
+ (正),-(負),*(指標),&(取位址)
自增自減運算子
++(自增),--(自減)
位運算子
| (按位或),& (按位與),~(按位取反),^(按位異或),,<>(右移)
賦值運算子
=, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=
空間申請與釋放
new, delete, new[ ] , delete
其他運算子
()(函式呼叫),->(成員訪問),,(逗號),(下標)
下面是不可過載的運算子列表:
注意:(1)過載不能改變運算子運算物件的個數;
(2)過載不能改變運算子的優先級別;
(3)過載不能改變運算子的結合性;
(4)過載運算子的函式不能有預設的引數,否則會改變運算物件的個數;
(5)過載運算子必須和使用者定義的自定義型別的物件一起使用,其引數至少應有乙個是類物件;
(6)用於類物件的運算子一般必須過載,但「=」(賦值)與「&」(取位址)運算子不必過載。
具體例子可以參見:
對運算子過載的函式有兩種處理方式:
(1)把運算子過載的函式作為類的成員函式:
(2)運算子過載的函式不是成員函式,在類中把它宣告為友元函式。
如果將運算子過載作為成員函式,它可以通過this指標自由地訪問本類的資料成員,因此可以少寫乙個引數:
如:
如果將運算子過載函式作為友元函式,由於友元函式不是該類的成員函式,因此函式的形參列表中必須有兩個引數,不能省略:
c 學習筆記 運算子過載
今天在看使用ceres擬合函式 的時候看到了運算子過載,由於c 當時沒學好現在也忘得差不多了,所以打算開始做乙個c 的學習筆記,看到哪寫到哪。今天看到的這段 如下 template bool operator const t const abc,t residual const 操作符過載的格式是 ...
C 學習筆記 運算子過載
自定義類可以過載運算子,大多數的運算子都是可以過載的,下表給出了那些運算子可以過載那些不可以過載。對於運算子的過載,我們需要明白運算子是如何呼叫的。非成員函式的運算子呼叫 d1 d2 表示式方式呼叫 operator d1,d2 等價的呼叫 成員函式的運算子呼叫方式 d1 d2 運算子呼叫 d1.o...
C 學習筆記,運算子的過載
運算子過載,就是賦予運算子新的功能,能夠對類的物件進行運算,從而讓程式更加簡潔直觀。運算子的過載是通過編寫運算子過載函式實現的 1.單目運算子 1.輸入輸出運算子的過載 stream operator istream os,a a ostream operator 案例 1.過載函式放在類外 2.雙...