运行时函数代码存储在内存中,调用函数时需根据函数地址读取代码块;
那么函数是否可以被当作指针来使用,答案是肯定的。
要将函数作为参数传递,需传递函数名。
下例为评估两位员工编写代码所耗时间,将计算不同员工时间的函数作为参数传递
#include <iostream>
double betsy(int);
double pam(int);
void estimate(int lines, double (*pf)(int));
int main()
{
using namespace std;
int code;
cout << "How many lines of code do you need ? ";
cin >> code;
cout << "Betsy's estimate:\n";
estimate(code, betsy);
cout << "Pam's estimate:\n";
estimate(code, pam);
}
double betsy(int lns)
{
return 0.05 * lns;
}
double pam(int lns)
{
return 0.05 * lns + 0.005 * lns;
}
void estimate(int lines, double (*pf)(int))
{
using namespace std;
cout << lines << "lines will take ";
cout << (*pf)(lines) << endl;
}
//结果
How many lines of code do you need ? 30
Betsy's estimate:
30lines will take 1.5
Pam's estimate:
30lines will take 1.65
函数estimate()声明时,第二个参数double (pf)(int)声明了一个函数指针。调用时使用了betsy和pam两个函数名。
在C++中(pf)和betsy,pam的意义相同,但格式不同。这产生了一个疑问,那么是否可以声明函数为(*betsy)(int)?C++时允许两种方式共存的。