CSP 201604-1折點計數
阿新 • • 發佈:2021-02-09
技術標籤:# 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(); }