本例子讲述了函数指针的使用。主函数两次调用了estimate()函数,第一次传递betsy()函数的地址,第二次传递的是pam()函数的地址。这种设计有利于以后程序的开发扩展。当Ralph为估算时间而开发自己的算法的时候,将不需要重新编写estimate();他只需要提供自己的ralph()函数,并确保函数的签名和返回类型正确即可。
// Chapter7.10.2_Example7.18fun_ptr.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// Chapter7.10.2_Example7.18fun_ptr.cpp : 指向函数的指针
#include <iostream>
double betsy(int);
double pam(int);
//第二个参数是个指针,指向返回值是double的,接收的参数为int类型的 函数
void estimate(int lines, double (*pf)(int));
int main()
{
using namespace std;
int code;
cout << "How many codes do you need?";
cin >> code;
cout << "Here is Besty's estimate:\n";
estimate(code,betsy);
cout << "Here is Pam's estimate:\n";
estimate(code, pam);
return 0;
}
double betsy(int lns)
{
return 0.05 * lns;
}
double pam(int lns)
{
return 0.03* lns+0.0004*lns*lns;
}
void estimate(int lines, double (*pf) (int))
{
using namespace std;
cout << lines << "lines will take ";
cout << (*pf)(lines) << "hour(s)\n";
}
函数指针在程序扩展中的应用
该示例展示了如何使用函数指针来调用不同函数。`estimate()`函数接受一个双精度浮点型的函数指针作为参数,该指针指向接受整型参数并返回双精度浮点型结果的函数。在`main()`函数中,`betsy()`和`pam()`函数的地址分别被传递给`estimate()`,实现了根据不同算法进行时间估算的功能。这种方法允许在不修改`estimate()`的情况下添加新的估算算法,如`ralph()`函数。
578

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



