В Си принято передавать функции по указателю.
Но в С++ есть способ передачи аргументов по ссылке.
Вариант 1:
#include <iostream>
double f(double x)
{
return x*x;
}
double integration(double (*func)(double),double a, double b, int n)
{
double deltaX = (b-a)/n;
double S = 0.0;
for(int i = 0; i < n; i++)
{
xi = a + i*deltaX;
S = S + (*func)(xi + deltaX/2.0);
}
return deltaX*S;
}
int main()
{
cout << integration(&f,1.0,4.0,50) << endl;
}
Вариант 2:
#include <iostream>
double f(double x)
{
return x*x;
}
double integration(double (&func)(double),double a, double b, int n)
{
double deltaX = (b-a)/n;
double S = 0.0;
for(int i = 0; i < n; i++)
{
xi = a + i*deltaX;
S = S + func(xi + deltaX/2.0);
}
return deltaX*S;
}
int main()
{
cout << integration(f,1.0,4.0,50) << endl;
}
Но все-таки, какой вариант более правильный в С++?