国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ STL 學(xué)習(xí)筆記 函數(shù)對(duì)象

2019-11-06 07:00:57
字體:
供稿:網(wǎng)友

函數(shù)對(duì)象

c++中函數(shù)名后的()稱為函數(shù)調(diào)用運(yùn)算符。函數(shù)調(diào)用運(yùn)算符也可以重載,如果某個(gè)類重載了函數(shù)調(diào)用運(yùn)算符,則該類的實(shí)例就是一個(gè)函數(shù)對(duì)象。函數(shù)對(duì)象本身并不是很有用,但他們使得算法操作的參數(shù)化策略成為可能,使通用性算法變得更加通用(讓函數(shù)作為參數(shù)還可以通過函數(shù)指針)

實(shí)例

class Add{ double Operator()(double x,double y) { return x+y; }};Add plus; //plus就是一個(gè)函數(shù)對(duì)象cout<<plus(1.2,3.4)<<endl;//通過函數(shù)對(duì)象調(diào)用重載函數(shù)cout<<Add() ()(1.2,3.4)<<endl; //Add()會(huì)創(chuàng)建一個(gè)臨時(shí)對(duì)象

學(xué)習(xí)代碼

#include <iostream>#include <vector>#include <list>#include <algorithm>using namespace std;/*class absInt {};*/ //class和struct都是定義類,struct成員默認(rèn)屬性為publicvoid PRint(double i){ cout << i << " ";}void myforeach(vector<double>::iterator & t1, vector<double>::iterator & t2, void(*fun)(double i))//可以通過函數(shù)指針將一個(gè)函數(shù)作為另一個(gè)函數(shù)的參數(shù){ while (t1 != t2) { fun(*t1); ++t1; }}struct absInt { //重載操作符() int operator()(int val) { return val < 0 ? -val : val; }};template <typename elementType>void FuncDisplayElement(const elementType & element){ cout << element << " " ;}template <typename elementType>struct DisplayElement { //存儲(chǔ)狀態(tài) int m_nCount; DisplayElement() { m_nCount = 0; } void operator()(const elementType & element) { ++m_nCount; cout << element << " "; }};int main(){ absInt absObj;//函數(shù)對(duì)象 int i = -2; unsigned int ui = absObj(i);//通過函數(shù)對(duì)象調(diào)用函數(shù) cout << ui << endl; vector<int> a; for (int i = 0; i < 10; i++) { a.push_back(i); } DisplayElement<int> mResult; mResult = for_each(a.begin(), a.end(), mResult);//把函數(shù)對(duì)象作為參數(shù)傳遞給另一個(gè)函數(shù) cout << endl; cout << "數(shù)量" << mResult.m_nCount << endl; list<char> b; for (char c = 'a'; c < 'k'; ++c) { b.push_back(c); } for_each(b.begin(), b.end(), DisplayElement<char>());//DisplayElement<char>()會(huì)創(chuàng)建一個(gè)臨時(shí)對(duì)象 cout << endl; vector<double> vec = { 76,92,86,74,95 }; cout << "vec里的類容為:" << endl; for_each(vec.begin(), vec.end(), print); cout << "vec里的內(nèi)容為" << endl; myforeach(vec.begin(), vec.end(), print); getchar(); return 0;}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 巨野县| 洱源县| 出国| 五华县| 峡江县| 修水县| 房山区| 拜泉县| 莱芜市| 延川县| 大宁县| 衡南县| 湄潭县| 镇原县| 收藏| 彝良县| 资阳市| 佛山市| 华容县| 禹城市| 额济纳旗| 唐河县| 襄城县| 紫云| 西充县| 广灵县| 中牟县| 子洲县| 延吉市| 吴堡县| 油尖旺区| 济阳县| 丽江市| 昭通市| 宜宾市| 咸丰县| 辽阳市| 金昌市| 阿拉善盟| 汶川县| 绥中县|