C 學習筆記 十一 c 中運算子的過載

2021-09-10 07:07:27 字數 1412 閱讀 8066

本文是譚浩強老師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.雙...