1. 程式人生 > 其它 >CSP 201604-1折點計數

CSP 201604-1折點計數

技術標籤:# C++日常

《c++程式設計語言(第四版)》3.4.3章節

所謂的函式物件是類的一種用法,將函式封裝成一個類,可以將函式的部分或者全部引數封裝成類的成員變數,也可以不封裝引數。過載類的“()”運算子,在該運算子函式裡實現函式操作。建立物件並使用“()”運算子呼叫函式。

例1:

class intLessThan
{
private:
    int val;
public:
    intLessThan(const int & v):val{v}{}
    bool operator ()(const int & x)const
    {
        return x < val;
    }
};

這個類建立物件時傳入一個引數val。過載“()”運算子,返回傳入值是否小於val。

呼叫:

#define debug qDebug()<<
int main(int argc, char *argv[])
{
    intLessThan fun{33};
    bool b = fun(55);
    debug b;
}

例2:用於獲取兩者之間的最大值的函式物件

template<typename T>
class getMaxValue
{
public:
    getMaxValue(T tv1,T tv2):v1{tv1},v2{tv2}
    {
    }
    void resetValue(T tv1,T tv2)//重設兩個值
    {
        v1 = tv1;
        v2 = tv2;
    }
    T operator ()()const
    {
        return std::max(v1,v2);
    }

private:
    T v1;
    T v2;
};

呼叫:

int main(int argc, char *argv[])
{
    getMaxValue<int> getMaxObject_int(22,33);
    debug getMaxObject_int();

    debug "重設比較的值";
    getMaxObject_int.resetValue(77,99);
    debug getMaxObject_int();

    getMaxValue<float> getMaxObject_float(222.22,333.33);
    debug getMaxObject_float();
}