#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));
}
本文展示了一个使用C++函数对象的示例,包括基本的加法和乘法操作,并通过派生类实现阶乘计算。此外,还介绍了一种通过函数对象进行间接调用的方法。
471

被折叠的 条评论
为什么被折叠?



