⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex11_6.cpp

📁 c++程序设计教材第二版书上即课后习题源代码
💻 CPP
字号:
//【例11.6】求和函数对象的定义和测试。
#include<iostream>
using namespace std;

template<typename T>class Sum{
	T res;
public:
	Sum(T i=0):res(i){} //构造函数,即Sum(T i=0){res=i;}
	T operator()(T x){  //累加,重载的调用操作符()
		res+=x;
		return res;
	}
};
template<typename FuncObject,typename T>
T Func1(FuncObject fob,const T &val){  //函数对象作为参数
	return fob(val);                       //调用重载的(),实现加法
}  
template<typename FuncObject,typename T>
T Func2(FuncObject &fob,const T &val){  //参数为引用,建议用此方式
	return fob(val);
} 
int main(){
	Sum<int> sum(10);                  //调用构造函数建立sum。res值为10
	int i=5,j=10;
	cout<<sum(j)<<'\t'<<sum(i)<<endl;  //调用重载的(),实现累加,输出:20  25
	cout<<Func1(sum,i)<<'\t';  
    //Func1参数传值,sum::res保持25,在一份拷贝上完成sum+i,输出:30
	cout<<Func1(sum,j)<<endl;        //在一份拷贝上完成sum+j,未实现累加,输出:35
	cout<<Func2(sum,i)<<'\t';
    //Func2参数为引用,在原sum上完成sum=sum+i,实现累加,输出:30
	cout<<Func2(sum,j)<<endl;            //完成sum=sum+j,实现累加,输出:40
    //以下为函数对象标准用法,每次新建函数对象,Func1和Func2结果无差别
	cout<<Func1(Sum<int>(5),i)<<'\t';     // 5+i,输出:10  
	cout<<Func2(Sum<int>(),j)<<endl;      // 0+j,输出:10
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -