亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

定義函數對象

2019-11-17 05:15:19
字體:
來源:轉載
供稿:網友

  盡管函數指針被廣泛用于實現函數回調,但C++還提供了一個重要的實現回調函數的方法,那就是函數對象。函數對象(也稱“算符”)是重載了“()”操作符的普通類對象。因此從語法上講,函數對象與普通的函數行為類似。

用函數對象代替函數指針有幾個優點,首先,因為對象可以在內部修改而不用改動外部接口,因此設計更靈活,更富有彈性。函數對象也具備有存儲先前調用結果的數據成員。在使用普通函數時需要將先前調用的結果存儲在全程或者本地靜態變量中,但是全程或者本地靜態變量有某些我們不愿意看到的缺陷。
其次,在函數對象中編譯器能實現內聯調用,從而更進一步增強了性能。這在函數指針中幾乎是不可能實現的。

下面舉例說明如何定義和使用函數對象。首先,聲明一個普通的類并重載“()”操作符:

class Negate
{
public:
int Operator() (int n) { return -n;}
};

重載操作語句中,記住第一個圓括弧總是空的,因為它代表重載的操作符名;第二個圓括弧是參數列表。一般在重載操作符時,參數數量是固定的,而重載“()”操作符時有所不同,它可以有任意多個參數。

因為在Negate中內建的操作是一元的(只有一個操作數),重載的“()”操作符也只有一個參數。返回類型與參數類型相同-本例中為int。函數返回與參數符號相反的整數。

使用函數對象

我們現在定義一個叫Callback()的函數來測試函數對象。Callback()有兩個參數:一個為int一個是對類Negate的引用。Callback()將函數對象neg作為一個普通的函數名:

#include <iostream>
using std::cout;

void Callback(int n, Negate & neg)
{
int val = neg(n); //調用重載的操作符“()”
cout << val;
}

不要的代碼中,注重neg是對象,而不是函數。編譯器將語句

int val = neg(n);

轉化為

int val = neg.operator()(n);

通常,函數對象不定義構造函數和析構函數。因此,在創建和銷毀過程中就不會發生任何問題。前面曾提到過,編譯器能內聯重載的操作符代碼,所以就避免了與函數調用相關的運行時問題。

為了完成上面個例子,我們用主函數main()實現Callback()的參數傳遞:

int main()
{
Callback(5, Negate() ); //輸出 -5
}

本例傳遞整數5和一個臨時Negate對象到Callback(),然后程序輸出-5。

模板函數對象

從上面的例子中可以看出,其數據類型被限制在int,而通用性是函數對象的優勢之一,如何創建具有通用性的函數對象呢?方法是使用模板,也就是將重載的操作符“()”定義為類成員模板,以便函數對象適用于任何數據類型:如double,_int64或char:

class GenericNegate
{
public:
template <class T> T operator() (T t) const {return -t;}
};

int main()
{
GenericNegate negate;
cout<< negate(5.3333); // double
cout<< negate(10000000000i64); // __int64
}

假如用普通的回調函數實現上述的靈活性是相當困難的。

標準庫中函數對象

C++標準庫定義了幾個有用的函數對象,它們可以被放到STL算法中。例如,sort()算法以
判定對象(PRedicate object)作為其第三個參數。判定對象是一個返回Boolean型結果的
模板化的函數對象??梢韵騭ort()傳遞greater<>或者less<>來強行實現排序的升序或降序:

#include <functional> // for greater<> and less<>
#include <algorithm> //for sort()
#include <vector>
using namespace std;

int main()
{
vector <int> vi;
//..填充向量
sort(vi.begin(), vi.end(), greater<int>() );//降序( descending )
sort(vi.begin(), vi.end(), less<int>() ); //升序 ( ascending )
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美黑人xxxⅹ高潮交| 国产精品第10页| 国产精品视频一| 国产精品青青在线观看爽香蕉| 久久久天堂国产精品女人| 亚洲人成免费电影| 美日韩在线视频| 亚洲精品久久久久中文字幕二区| 在线精品播放av| 97久久精品人人澡人人爽缅北| 久久久天堂国产精品女人| 中文字幕亚洲无线码a| 中文字幕亚洲欧美日韩2019| 精品美女国产在线| 久久久久久久亚洲精品| 久久亚洲精品中文字幕冲田杏梨| 久久久久久18| 久久99久久亚洲国产| 国产99久久精品一区二区 夜夜躁日日躁| 91在线观看免费高清完整版在线观看| 欧美一级bbbbb性bbbb喷潮片| 久久久久久久色| 成人网在线观看| 亚洲影视中文字幕| 97国产精品人人爽人人做| 久久免费观看视频| 色偷偷888欧美精品久久久| 欧美在线激情网| 国产精品欧美在线| 久久99国产综合精品女同| 亚洲国产美女精品久久久久∴| 欧美精品电影在线| 欧美极品欧美精品欧美视频| 久久免费精品视频| 亚洲天堂av在线播放| 国产91精品视频在线观看| 成人免费在线网址| 久久久久久这里只有精品| 欧美成人免费观看| 久久精品国产电影| 97精品视频在线观看| 国产精品久久久久久久久影视| 最新69国产成人精品视频免费| 色噜噜狠狠狠综合曰曰曰| 日韩欧美黄色动漫| 亚洲视频在线观看免费| 九九精品在线播放| 欧美在线视频免费| 国产成人精品国内自产拍免费看| 欧美视频不卡中文| 日韩精品在线观看一区二区| 国产精品久久久久久av福利软件| 97视频在线观看视频免费视频| 亚洲福利在线看| 最近更新的2019中文字幕| 5566成人精品视频免费| 欧美性理论片在线观看片免费| 亚洲欧洲黄色网| 91福利视频在线观看| 亚洲天堂av电影| 亚洲欧美中文日韩在线| 国产日韩欧美中文| 久久偷看各类女兵18女厕嘘嘘| 欧美精品免费在线观看| 精品国产欧美一区二区三区成人| 美女久久久久久久| 成人激情在线观看| 少妇高潮久久久久久潘金莲| 亚洲美女在线视频| 91精品国产高清久久久久久91| 久久久国产精品免费| 久久久久久久网站| 神马久久桃色视频| 中文字幕日本欧美| 欧美性极品少妇精品网站| 亚洲人精品午夜在线观看| 国产在线观看精品一区二区三区| 久久国产精品亚洲| 成人国内精品久久久久一区| 欧美日产国产成人免费图片| 亚洲一区二区中文字幕| 国产精品亚洲网站| 97视频在线看| 美女国内精品自产拍在线播放| 欧美电影免费观看网站| 中文字幕欧美视频在线| 亚洲高清在线观看| 中日韩美女免费视频网址在线观看| 国产一区二区在线免费视频| 久久久久亚洲精品成人网小说| 久久久久在线观看| 色天天综合狠狠色| 亚洲国产中文字幕在线观看| 91高清视频免费| 欧美激情一区二区三区久久久| 久久这里只有精品视频首页| 亚洲xxx视频| 91老司机精品视频| 亚洲影院高清在线| 在线观看久久久久久| 欧美极度另类性三渗透| 欧美日韩免费区域视频在线观看| 日韩专区中文字幕| 国产精品一区二区久久久久| 日韩欧美一区视频| 欧美在线不卡区| 亚洲午夜国产成人av电影男同| 日韩动漫免费观看电视剧高清| 国产精品视频一| 亚洲女同性videos| 91久久夜色精品国产网站| 亚洲人成网7777777国产| 欧美精品videofree1080p| 视频在线一区二区| 国模私拍一区二区三区| 国产精品日日做人人爱| 欧美最近摘花xxxx摘花| 亚洲国产精品va在线看黑人动漫| 日韩欧美亚洲国产一区| 中文字幕亚洲综合久久筱田步美| 久久6免费高清热精品| 亚洲欧美在线第一页| 国产精品高清免费在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 2025国产精品视频| 91久久夜色精品国产网站| 日本三级韩国三级久久| 国产精品2018| 欧美电影免费观看| 国产精品日日摸夜夜添夜夜av| 日本高清不卡的在线| 欧美亚洲伦理www| 92国产精品久久久久首页| 欧美午夜美女看片| 懂色aⅴ精品一区二区三区蜜月| 97视频在线观看网址| 中文字幕视频在线免费欧美日韩综合在线看| 久青草国产97香蕉在线视频| 欧美精品日韩www.p站| 亚洲天堂男人天堂女人天堂| 在线视频欧美日韩精品| 久久理论片午夜琪琪电影网| 久久精品在线播放| 日韩在线观看你懂的| 91九色国产在线| 美女视频久久黄| 日本欧美精品在线| 精品久久香蕉国产线看观看gif| 亚洲人在线观看| 日本韩国欧美精品大片卡二| 国产成人午夜视频网址| 精品欧美激情精品一区| 国产精品视频地址| 日韩av电影中文字幕| 欧美另类暴力丝袜| 亚洲伊人一本大道中文字幕| 亚洲xxxx妇黄裸体| 亚洲国产成人精品一区二区| 国产精品扒开腿爽爽爽视频| 91九色国产社区在线观看| 亚洲午夜久久久影院| 欧美视频裸体精品| 国产精品美女免费视频| 欧美午夜久久久|