免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
什么叫做偽函數(shù),或是函數(shù)對(duì)象?它的優(yōu)點(diǎn)是什么?

 

 

這里用一個(gè)簡(jiǎn)單的代碼片段來說明偽函數(shù)的實(shí)現(xiàn)和用法,及其優(yōu)點(diǎn)。代碼示例如下:

class Abs

{

public:

int operator()(int num)const; //這個(gè)操作符的重載是實(shí)現(xiàn)偽函數(shù)的關(guān)鍵

Abs();

void setIsOpponent(bool isOpponent);

private:

bool isOpponent;

};

//關(guān)鍵方法

int Abs::operator()(int num)const

{

int res;

if(!isOpponent)

{

res = num > 0 ? num : -num;

}

else

{

res = num > 0 ? -num : num;

}

return res;

}

Abs::Abs()

{

isOpponent = false;

}

void Abs::setIsOpponent(bool aIsOpponent)

{

isOpponent = aIsOpponent;

}

我們可以看到,由于Abs類實(shí)現(xiàn)了一個(gè)"()"操作符,這樣就允許把這個(gè)類像函數(shù)一樣使用。

我們把這樣的類稱為函數(shù)對(duì)象,或稱做偽函數(shù)。

使用示例如下:

Abs myAbs;

myAbs.setIsOpponent(true); //進(jìn)行相反操作。

int value = myAbs(-23); //這里如同把myAbs實(shí)例當(dāng)作一個(gè)函數(shù)來使用。

優(yōu)點(diǎn):使用仿函數(shù)就像使用一個(gè)普通的函數(shù)一樣,但是它的實(shí)現(xiàn)可以訪問仿函數(shù)中所有的成員變量來進(jìn)行通行;而普通函數(shù)若要通信就只能依靠全局變量了。

(http://blog.chinaunix.net/u3/90609/showart_1811637.html)

Bjarne: 什么是函數(shù)對(duì)象?

顧名思義,就是在某種方式上表現(xiàn)的象一個(gè)函數(shù)的對(duì)象。典型的,它是指一個(gè)類的實(shí)例,這個(gè)類定義了應(yīng)用操作符operator()。

函數(shù)對(duì)象是比函數(shù)更加通用的概念,因?yàn)楹瘮?shù)對(duì)象可以定義跨越多次調(diào)用的可持久的部分(類似靜態(tài)局部變量),同時(shí)又能從對(duì)象的外面進(jìn)行初始化和檢查(和靜態(tài)局部變量不同)。例如:

class Sum

{

int val;
public:

Sum(int i):val(i) {}

operator int() const { return val; } // 取得值

int operator()(int i) { return val+=i; } // 應(yīng)用
};

void f(vector v)
{
Sum s = 0; // initial value 0
s = for_each(v.begin(), v.end(), s); // 求所有元素的和
cout << "the sum is " << s << "/n";

//或者甚至:
cout << "the sum is " << for_each(v.begin(), v.end(), Sum(0)) << "/n";

}

注意:一個(gè)擁有應(yīng)用操作符的函數(shù)對(duì)象可以被完美地內(nèi)聯(lián)化(inline),因?yàn)樗鼪]有涉及到任何指針,后者可能導(dǎo)致拒絕優(yōu)化。與之形成對(duì)比的是,現(xiàn)有的優(yōu)化器幾乎不能(或者完全不能?)將一個(gè)通過函數(shù)指針的調(diào)用內(nèi)聯(lián)化。

在標(biāo)準(zhǔn)庫(kù)中,函數(shù)對(duì)象被廣泛的使用以獲得彈性。

http://hi.baidu.com/ilotus_y/blog/item/7a1044d3b23f6fdaa9ec9a87.html

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Qt 常用類 QPoint
C++中的引用
構(gòu)造函數(shù),默認(rèn)構(gòu)造函數(shù),復(fù)制構(gòu)造函數(shù),賦值構(gòu)造函數(shù)
const放在函數(shù)前后的區(qū)別
const在函數(shù)前與函數(shù)后的區(qū)別
C++中Reference與指針(Pointer)的使用對(duì)比
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服