天天看點

21、C++ Primer 4th 筆記,重載運算符(2)

1、自增操作符和自減操作符

為了與内置類型一緻,字首操作符應傳回被增量或減量對象的引用;後辍式操作符應傳回舊值(不是引用)。後辍式操作符函數接受一個額外的(即無用的)int型形參。

示例

顯式調用操作符

示例如上中。

所傳遞的值通常會被忽略,便是必要的。

2、函數調用操作符和函數對象

可以為類類型的對象重載函數調用操作符。一般表示操作的類重載調用操作符。函數調用操作符必須聲明為成員函數,可以重載(由形參的數目或類别加以差別)。

通過為類類型的對象提供一個實參表而使用調用操作符,看起來像一個函數調用。定義了函數調用操作符的類,其對象常稱為函數對象,即他們是行為類似函數的對象。

3、将函數對象用于标準庫算法

使用謂詞函數示例

使用函數對象比使用謂詞函數更靈活。

函數對象示例

4、标準庫定義的函數對象

這些标準庫函數對象類型放在functional頭檔案中定義。

算術函數對象類型

函數對象

所應用的操作符

plus<Type>

applies +

minus<Type>

applies -

multiplies<Type>

applies *

divides<Type>

applies /

modulus<Type>

applies %

negate<Type>

關系函數對象類型

equal_to<Type>

applies ==

not_equal_to<Type>

applies !=

greater<Type>

applies >

greater_equal<Type>

applies >=

less<Type>

applies <

less_equal<Type>

applies <=

邏輯函數對象類型

logical_and<Type>

applies &&

logical_or<Type>

applies |

logical_not<Type>

applies !

    有兩個一進制函數對象類:一進制減(negate<Type>))和邏輯非(logical_not<Type>))。其餘的标準庫函數對象都是表示二進制操作符的二進制函數對象類。為二進制操作符定義的函數調用操作符需要兩個給定類型的形參,而一進制函數對象類型定義了接受一個實參的調用操作符。

5、函數對象的函數擴充卡

    标準庫提供了一組函數擴充卡,用于特化和擴充一進制和二進制函數對象。函數擴充卡分為如下兩類:

1)綁定器,是一種函數擴充卡,它通過将一個操作數綁定到給定值而将二進制函數對象轉換為一進制函數對象。

2)求反器,是一種函數擴充卡,它将謂詞函數對象的真值求反。

标準庫定義了兩個綁定器擴充卡:bind1st 和 bind2nd。每個綁定器接受一個函數對象和一個值。bind1st 将給定值綁定到二進制函數對象的第一個實參,bind2nd 将給定值綁定到二進制函數對象的第二個實參。

标準庫還定義了兩個求反器:not1 和 not2。not1 将一進制函數對象的真值求反,not2 将二進制函數對象的真值求反。

#include "iostream" 

#include "stdio.h" 

using namespace std;

struct absInt

{

int operator()(int val)

return val < 0 ? -val:val;

}

};

int main()

int i = -42;

absInt absOjb;

unsigned int ui = absOjb(i);

return 0;

繼續閱讀