#include <iostream>
#include <algorithm>
#include <functional>
 
using namespace std;
 
class Max
{
public:
    int operator()(int x, int y)
    {
        return max(x, y);
    }
};
 
 
class AccMax
{
private:
    // 일반 함수와는 다르게 상태를 저장할 수 있다
    int _max = numeric_limits<int>::min();
 
public:
    int operator()(int x)
    {
        return _max = max(x, _max);
    }
};
 
 
struct Average
{
private:
    double _total = 0;
    int _times = 0;
 
public:
    double operator()(double value)
    {
        _times += 1;
        _total += value;
        return _total / _times;
    }
};
 
 
struct Print
{
public:
    void operator()(int v) const
    {
        cout << v << endl;
    }
};
 
int main()
{
    Max mx;
    cout << mx(12<< endl;
    cout << mx(23<< endl;
    cout << mx(34<< endl;
    cout << mx(56<< endl;
 
 
    AccMax amx;
    cout << amx(1<< endl;
    cout << amx(3<< endl;
    cout << amx(5<< endl;
    cout << amx(2<< endl;
    cout << amx(4<< endl;
    cout << amx(6<< endl;
 
 
    Average avg;
    cout << avg(100<< endl;
    cout << avg(200<< endl;
    cout << avg(300<< endl;
 
 
    Print print;
    int nums[] = { 12345 };
    std::for_each(nums, nums + size(nums), print);
 
    function<void(int)> func = print;
    func(1);
 
    plus<int> p; // 함수 객체
    cout << p(12<< endl;
 
    negate<int> n; // 함수 객체
    cout << n(1<< endl;
 
    equal_to<int> et; // 함수 객체
    cout << et(11<< endl;
}
cs

'::public > C++' 카테고리의 다른 글

상속의 기본  (0) 2020.11.27
사용자 정의 리터럴  (0) 2020.11.23
변환 연산자 오버로딩, 변환 생성자  (0) 2020.11.23
대입 연산자 오버로딩, 복사 생성자  (0) 2020.11.23
첨자 연산자 오버로딩  (0) 2020.11.23

+ Recent posts