C 之函式呼叫操作符和函式物件

2021-07-08 11:09:42 字數 1920 閱讀 4612

可以為類型別的物件過載函式呼叫操作符。一般為表示操作的類過載函式呼叫操作符;

函式呼叫操作符必須宣告為函式成員。乙個類可以定義函式呼叫操作符的多個版本,由形參的數目或型別加以區別;

定義了呼叫操作符的類,其物件常稱為為函式物件(function object)即它們是行為類似函式的物件;

eg.struct absinit

};struct funcobejct

};//test code

int main()

class gt_cls

bool operator() (const std::string & s)

private:

std::string::size_type bound;

};//test code

int main()

std::vector::size_type wc = std::count_if(words.begin(),words.end(),gt6);

std::cout<::size_type wc1 = std::count_if(words.begin(),words.end(),gt_cls(6));

std::cout<::size_type wc2 = std::count_if(words.begin(),words.end(),gt_cls(2));

std::cout<

標準庫定義了一組算術,關係與邏輯運算的函式物件類,以及一組函式介面卡,都是在functional 標頭檔案中定義的;

具體請參考:

在算犯中使用函式物件,用於覆蓋演算法使用的預設操作符;

標準庫提供兩種函式介面卡:

1. binder,將乙個運算元繫結給給定值而將二元函式物件轉換為一元函式物件;

bind1st:將給定值繫結到函式物件的第乙個實參;

bind2nd:將給定值繫結到函式物件的第二個實參;

2. negator ,將謂詞函式物件的真值求反;

not1:將一元函式物件的真值求反;

not2:將二元函式物件的真值求反;

//test code

int main()

//find all value that is greater than 1024

std::vector::iterator result = std::find_if(ivec.begin() , ivec.end() , std::bind2nd(std::greater() ,1024) );

while(result != ivec.end())

std::vectorsvec;

svec.push_back("hello world");

svec.push_back("test");

svec.push_back("huqijun");

svec.push_back("pooh");

//find all value that is not equal to "pooh"

std::vector::iterator ret = std::find_if(svec.begin(),svec.end(),std::bind2nd(std::not_equal_to(),"pooh") );

while(ret != svec.end())

//double every value

std::vectorivec2;

ivec2.reserve(12);

for(int i = 0; i<12 ; ++i)

std::for_each(ivec2.begin(),ivec2.end(),std::bind2nd(std::multiplies(),2) );

for(std::vector::iterator i = ivec2.begin() ; i!= ivec2.end() ; ++i)

{std::cout<<*i<

過載函式呼叫操作符

函式呼叫操作符?函式呼叫操作符是 因此此操作符的函式過載是operator 過載函式呼叫操作符的類物件稱為函式物件或仿函式,因此我們可以像使用函式名一樣使用物件名。先看乙個簡單的例子。過載了函式呼叫操作符的乙個類 class area 上面的類中,操作符函式計算乙個面積,它是兩個整數實參的乘積。為了...

C 中函式呼叫操作符的過載

1,本博文講述函式物件問題 2,客戶需求 1,編寫乙個函式 1,函式可以獲得斐波那契數列每項的值 2,每呼叫一次返回乙個值 3,函式可根據需要重複使用 4,示例 1 for int i 0 i 10 i 2 3,第乙個解決方案程式設計實驗 1,main.cpp 檔案 1 include 2 incl...

C 函式過載操作符

c 可以對操作符 operator 進行過載,一般定義在類的成員函式中,以下面的 為例.class point 定義乙個類模板 建構函式 point 析構函式 過載算術操作符 類似 point operator const point other 過載關係操作符 類似 bool operator c...