什麼叫做偽函式,或是函式物件?它的優點是什麼?

2021-05-18 01:07:36 字數 1565 閱讀 1355

筆者這裡用乙個簡單的**片段來說明偽函式的實現和用法,及其優點。**示例如下:

class abs

public:

int operator()(int num)const;//這個操作符的過載是實現偽函式的關鍵

abs();

void setisopponent(bool isopponent);

private:

bool isopponent;

//關鍵方法

int abs::operator()(int num)const

else

return res;

}

abs::abs()

void abs::setisopponent(bool aisopponent)

我們可以看到,由於abs類實現了乙個"()"操作符,這樣就允許把這個類像函式一樣使用。

我們把這樣的類稱為函式物件,或稱做偽函式。

使用示例如下:

abs myabs;

myabs.setisopponent(true); //進行相反操作。

int value = myabs(-23); //這裡如同把myabs例項當作乙個函式來使用。

優點:使用仿函式就像使用乙個普通的函式一樣,但是它的實現可以訪問仿函式中所有的成員變數來進行通行;而普通函式若要通訊就只能依靠全域性變數了。

bjarne: 什麼是函式物件?

顧名思義,就是在某種方式上表現的象乙個函式的物件。典型的,它是指乙個類的例項,這個類定義了應用操作符operator()。

函式物件是比函式更加通用的概念,因為函式物件可以定義跨越多次呼叫的可持久的部分(類似靜態區域性變數),同時又能從物件的外面進行初始化和檢查(和靜態區域性變數不同)。例如:

class sum

operator int() const // 取得值

int operator()(int i) // 應用

};void f(vector v)

注意:乙個擁有應用操作符的函式物件可以被完美地內聯化(inline),因為它沒有涉及到任何指標,後者可能導致拒絕優化。與之形成對比的是,現有的優化器幾乎不能(或者完全不能?)將乙個通過函式指標的呼叫內聯化。

在標準庫中,函式物件被廣泛的使用以獲得彈性。

C 中什麼叫做函式模板?

所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表,這個函式型別就稱為函式模板。具體表現 模板定義,includeusing namespace std template t max t a,t a,t c int main int i1 8,i2 5 i...

Bjarne 什麼是函式物件?

顧名思義,就是在某種方式上表現得象乙個函式的物件。典型地,它是指乙個類的例項,這個類定義了應用操作符operator 函式物件是比函式更加通用的概念,因為函式物件可以定義跨越多次呼叫的可持久的部分 類似靜態區域性變數 同時又能夠從物件的外面進行初始化和檢查 和靜態區域性變數不同 例如 class s...

函式過載與函式重寫 有的書也叫做「覆蓋」)的區別

常考的題目。從定義上來說 過載 是指允許存在多個同名函式,而這些函式的參數列不同 或許引數個數不同,或許引數型別不同,或許兩者都不同 重寫 是指子類重新定義復類虛函式的方法。從實現原理上來說 過載 編譯器根據函式不同的參數列,對同名函式的名稱做修飾,然後這些同名函式就成了不同的函式 至少對於編譯器來...