C++函数对象的分析

函数对象的分析

面试题

1、编写一个函数
	a、函数可以获取斐波那契数列每项的值;
	b、每调用一次,返回一个值;
	c、函数可根据需要重复使用;

第一个解决方案:

#include <stdio.h>
#include <iostream>
#include <cstring>

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;
	}
	
    return 0;
}

第二个解决方案:
1、函数的对象
a、使用具体的对象取代函数;
b、该对象具备函数调用的行为;
c、构造函数指定具体数列项的起始位置;
d、多个对象相互独立的求解数列项。
2、函数调用操作符(())
a、只能通过类的成员函数重载;
b、可以定义不同参数的多个重载函数。

#include <stdio.h>
#include <iostream>
#include <cstring>


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 temp = a1;
			a1 = a0 + a1;
			a0 = temp;
		}
	}
	
	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<10; i++)
	{
		cout << fib() << endl;
	}
	
	Fib fib2;
	cout << endl;
	
	for(int i = 0; i<10; i++)
	{
		cout << fib2() << endl;
	}
	
	Fib fib3(0);
	
	cout << endl;
	for(int i = 0; i<10; i++)
	{
		cout << fib3() << endl;
	}	
    return 0;
}

小结

1、函数调用操作符(())是可以被操作的;
2、函数调用操作符只能通过类的成员函数重载;
3、函数调用操作符可以定义不同参数的多个重载函数;
4、函数对象用于在工程中取代函数指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值