#include <iostream>

using namespace std;

class functor{
public:
    virtual int operator () ();
};

class number:public functor{
protected:
    int _n;
public:
    number(int);
    int operator () ();
};

class increase:public functor{
protected:
    functor * _next;
public:
    increase(functor * next);
    int operator () ();
};

class inc{
    
};

int main()
{
    number cinq(5);
    increase cinqPlusPlus(&cinq);
    cout << cinqPlusPlus() << endl;

    return 0;
}

int functor::operator () ()
{
    return 0;
}

number::number(int n)
{
    _n = n;
}

int number::operator() ()
{
    return _n;
}

increase::increase(functor * next)
{
    _next = next;
}

int increase::operator() ()
{
    return (*_next)() + 1;
}
