調用操作符和函數對象

#include<iostream>
using namespace std;

class absInt{
public:
	int operator()(int val)/*函數調用操作符*/
	{
		return val<0?-val:val;
	}
};

int main(){
	int i=-41;
	absInt absObj;
	int ui=absObj(i);
	cout<<ui<<endl;
	return 0;
}

可以爲類類型的對象重載函數調用操作符。通過爲類類型的對象提供一個實參表而使用調用操作符,所用的方式看起來像一個函數調用。

儘管absObj是一個對象而不是一個函數,仍然可以“調用”該對象,效果是運行由absObj對象定義的重載調用操作符,該操作符接受一個int值並返回它的絕對值。

函數調用操作符必須聲明爲成員函數。一個類可以定義函數調用操作符的多個版本,由形參的數目或類型加以區別。

定義了調用操作符的類,其對象稱爲“函數對象”,即它們是行爲類似於函數的對象。

標準庫定義了一組算術,關係與邏輯函數對象類。定義在functional頭文件中。

#include<iostream>
#include<functional>
using namespace std;

int main(){
	plus<int> intAdd;
	negate<int> intNegate;
	int sum=intAdd(10,20);
	cout<<sum<<endl;
	sum=intAdd(10,intNegate(10));
	cout<<sum<<endl;
	return 0;
}

標準庫提供了一組函數適配器,用於特化和擴展一元和二元函數對象。分以下兩類:

1.綁定器,將一個操作數綁定到給定值而將二元函數對象轉換爲一元函數對象

2.求反器,將謂詞函數對象的真值求反。

標準庫2個綁定器bind1st,bind2nd。每個綁定器接受一個函數對象和一個值。

標準庫2個求反器not1,not2.not1將一元函數對象的真值求反,not2將二元函數對象的真值求反。



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章