首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么用C实现函数重载(不是用C++!)

2012-02-28 
如何用C实现函数重载(不是用C++!!)如何用C实现函数重载(不是用C++!!)[解决办法]譬如:用函数Integral(doubl

如何用C实现函数重载(不是用C++!!)
如何用C实现函数重载(不是用C++!!)

[解决办法]
譬如:用函数Integral(double limita,double limitb,double eps,double (*f)())来实现积分,但由于被积表达式f(x)本身会含有参数且数目不等。如:有时f(x)=a*x+b,有时f(x)=a*sin(b*x)+c*cos(c*x),等等。如果不用函数重载的话,就要编写Integral1(double limita,double limitb,double eps,double (*f)(),double a,double b)和Integral2(double limita,double limitb,double eps,double (*f)(),double a,double b,double c,double d)。非常麻烦,既重复劳动,又不通用。我尝试用Integral(double limita,double limitb,double eps,double (*f)(),double p[])来传递参数,结果失败。如何用函数重载的方法写一个通用的积分函数呢?
=====>
可以这样写:

typedef double (*FUNCTION)(double, void*);
double Integral(double limita, double limitb, double eps, FUNCTION f, void* fparam)
{
// do your intgral task with f

// call f(x, void*)
double f0 = f(0, fparam);
double f2 = f(2, fparam);
..........

.......
}

struct F1Param
{
double a;
double b;
};

struct F2Param
{
double c;
double d;
double e;
double f;
};

double f1(double x, void* param)
{
F1Param* f1para = (F1Param*)param;
//access a, b
double a = f1para-> a;
double b = f1para-> b;
// using a, b
..................
}

double f2(double x, void* param)
{
F2Param* f2para = (F2Param*)param;
//access c, d, e, f
...
double c = f2para-> c;
double d = f2para-> d;
double e = f2para-> e;
double f = f2para-> f;
// using c,d,e,f...
..........
}

void MyUsingIntergate()
{
// integrat f1
F1Param f1para;
f1para.a = 1.0;
f1para.b = 2.0;
double resF1 = Integral(limita, limitb, eps, f1, &f1para);

.....
// integrate f2
F2Param f2para;
f2para.c = 1;
f2para.d = 2;
f2para.e = 3;
f2para.f = 4;
double resF2 = Integral(0,1, 1.e-8, f2, &f2para);

................

}


热点排行