C++深度解析 函数对象分析 --- 重载函数调用操作符()(34)
2018-12-30 21:16
405 查看
C++深度解析 函数对象分析 --- 重载函数调用操作符()(34)
客户需求:
编写一个函数
- 函数可以获得斐波那契数列每项的值
- 每调用一次返回一个值(1 1 2 3 5 8 13)
- 函数可根据需要重复使用
第一次调用返回1,第二次调用返回1,第三次调用返回2,第四次调用返回3,第五次调用返回5,第六次调用返回8,第七次调用返回13。
示例程序:
[code]#include <iostream> #include <string> 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; }
结果如下:
上述程序存在的问题:
函数一旦开始调用就无法重来
- 静态局部变量处于函数内部,外界无法改变。
- 函数为全局函数,是唯一的,无法多次独立调用。
- 无法指定某个具体的数列项作为初始值。
函数对象
使用具体的类对象取代函数
该类的对象具备函数调用的行为
构造函数指定具体数列项的起始位置
多个对象相互独立的求解数列项
函数调用操作符(())
只能通过类的成员函数重载
可以定义不同参数的多个重载函数
示例程序:
[code]#include <iostream> #include <string> using namespace std; class Fib { 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; }
结果如下:
小结
函数调用操作符(())是可重载的
函数调用操作符只能通过类的成员函数重载
函数调用操作符可以定义不同参数的多个重载函数
函数对象用于工程中取代函数指针
阅读更多
相关文章推荐
- c++之STL(9)重载函数调用操作符 函数对象 谓词
- C++深度解析 智能指针分析 --- 重载指针特征操作符->和*(36)
- C++ 重载调用操作符和函数对象
- 【C++深度剖析教程13】函数对象的分析
- 【深度探索c++对象模型】Function语义学之成员函数调用方式
- C++ 函数调用操作符 () 、 函数对象
- C++ 之函数调用操作符和函数对象
- C++面向对象操作符重载:调用操作符和函数对象
- [C++对象模型][5]堆栈与函数调用
- 解析c语言中"函数调用中缺少哨兵"的情况分析
- C++ 拷贝构造函数和重载赋值操作符相互调用分析 [转]
- c++函数在传入对象参数和返回对象时候的内存调用情况
- 解决vc C++ 调用 C 函数时unresolved external symbol " __cdecl 。。。无法解析的外部符合
- C++对象模型的那些事儿之六:成员函数调用方式
- C++ - 对象模型之 成员函数调用
- [C++对象模型][5]堆栈与函数调用
- PInvoke调用导致堆栈不对称 c#调用C++win32非托管dll的问题深度分析
- 深度解析-->c++中构造函数,拷贝构造,赋值运算符重载,析构函数的调用情况
- C++中当对象指针为空时,虚函数和非虚函数的调用情况
- C++类对象内存模型与成员函数调用分析(上)