#include <windows.h>
#include <stdio.h>
class FUNC{
public :
virtual int operator()(int a, int b)
{
return a + b;
}
};
class FUNC2 : public FUNC{
public :
int operator()(int a, int b)
{
return a * b;
}
};
int callfunc(FUNC &f, int a, int b)
{
return f(a, b);
}
class CurFunc;
class Y;
class CurFunc{
public :
virtual int operator()(Y &f, int n)
{
return 0;
}
};
class Y{
public :
CurFunc *mfunc;
Y(CurFunc &k) : mfunc(&k){}
int operator()(int n)
{
return (*mfunc)(*this, n);
}
};
class Fab : public CurFunc{
public :
int operator()(Y &f, int n)
{
if(n > 1)
return n * f(n - 1);
else
return 1;
}
};
void main()
{
FUNC2 add;
Fab fab;
int out = Y(fab)(5);
printf("the number is %d/n", callfunc(add, 10, 20));
printf("the number is %d/n", Y(fab)(10));
}