c_cpp C ++函数调用符重载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp C ++函数调用符重载相关的知识,希望对你有一定的参考价值。

/* 
解决方案:
  使用具体的类对象取代函数
  该类的对象具备函数调用的行为
  构造函数指定具体数列项的起始位置
  多个对象相互独立的求解数列项
*/

#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;
	getchar();
	return 0;
}
/*
方案存在的问题:
  函数一旦开始调用就无法重来
  静态局部变量处于函数内部,外界无法改变
  函数为全局函数,是唯一的,无法多次独立使用
  无法指定某个具体的数列作为初始值
*/

#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 < 10;i++){
		cout<<fib()<<endl;	
	} 
	return 0;
} 
//尽可能不使用全局变量,静态局部变量在函数返回之后不会被摧毁

以上是关于c_cpp C ++函数调用符重载的主要内容,如果未能解决你的问题,请参考以下文章

C++Primer 第十四章

c_cpp C ++立即调用函数表达式(IIFE)

c_cpp 类似Haskell的部分函数调用C ++ 11

c_cpp 函数重载

c_cpp ::函数调用之前

运算符优先级