客户需求编写一个函数函数可以获得斐波那契数列每项的值每调用一次返回一个值函数可根据需要重复使用编程实验: 第一个解决方案#include <iostream>using namespace std;int fib(){ static int a0 = 0; static int a1 = 1; int ret = a1; a1 = a0 + a1; a0 = ret; return ret;}int main(){ for(int i=0; i<10; i++) { cout << fib() << endl; } cout << endl; for(int i=0; i<5; i++) { cout << fib() << endl; } return 0;}输出:1123581321345589144233377610存在的问题函数一旦开始调用就无法重来静态局部变量处于函数内部,外部无法改变函数为全局函数,是唯一的,无法多次独立使用无法指定某个具体的数列项作为初始值解决方案函数对象使用具体的类对象取代函数该类的对象具备函数调用的行为构造函数指定具体数列像项的起始位置多个对象相互独立的求解数列项函数对象函数调用操作符只能通过类的成员函数重载可以定义不同参数的多个重载函数编程实验: 最终解决方案#include <iostream>using namespace std;class Fib{private: int a0; int a1;public: Fib() { a0 = 0; a1 = 1; } Fib(int n) { a0 = 0; a1 = 1; for(int i=2; i<=n; i++) { int t = a1; a1 = a0 + a1; a0 = t; } } int operator () () { int ret = a1; a1 = a0 + a1; a0 = ret; return ret; }};int main(){ Fib fib; for(int i=0; i<10; i++) { cout << fib() << endl; } cout << endl; for(int i=0; i<5; i++) { cout << fib() << endl; } cout << endl; Fib fib2(10); for(int i=0; i<5; i++) { cout << fib2() << endl; } return 0;}输出:11235813213455891442333776105589144233377小结函数调用操作符( () )是可重载的函数调用操作符只能通过类的成员函数重载函数调用操作符可以定义不同参数的多个重载函数函数对象用于在工程中取代函数指针以上内容参考狄泰软件学院系列课程,请大家保护原创!