C++中的函数对象

函数对象
  • 若一个类重载了运算符 “()” ,则该类的对象就成了函数对象
	class CMyAverage
	{ //函数对象类
	  	public:
	  		double operator()( int a1 , int a2 , int a3 )
	  		{
				return (double)( a1 +  a2 + a3 ) / 3 ;
			}
    };
    CMyAverage average; //函数对象
    cout << average( 3 , 2 , 3 ); // average.operator()( 3 , 2 , 3 );

结果:
在这里插入图片描述
函数对象的应用示例

	#include <iostream>
	#include <vector>
	#include <algorithm>
	#include <numeric>
	#include <functional>
	using namespace std;
	int sumSquare( int total , int value )
	{
		return total + value * value ;
	}
	template < class T >
	void printInterval( T first , T last )
	{
		//输出区间[ first , last )中的内容
		for( ; first != last ; first++ )
		{
			cout << *first << " " ;
		}
		cout << endl;
    }
    template < class T >
    class SumPower
    {
		private:
			int power;
		public:
			SumPower( int p ):power( p ) {}
			const T operator()( const T &total , const T &value )
			{
				//计算value的power次方,并加到total上
				T v = value;
				for( int i = 0 ; i < power - 1 ; i++)
				{
			         v *= value;
				}
				return total + v ;
			}
	};
	int main()
	{
		const int SIZE = 10 ;
		int a1[] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 };
		vector<int> v( a1 , a1 + SIZE );
		cout << "v: " << endl;
		cout << printInterval( v.begin() , v.end() ) << endl;
		int result = accumulate( v.begin() , v.end() , 0 , sumSquare);
		cout << "平方和: " << result << endl;
		result = accumulate( v.begin() , v.end() , 0 , SumPower<int>(3));
		cout << "立方和: " << endl;
		result = accumulate( v.begin() , v.end() , 0 , SumPower<int>(4));
		cout << "4次方和: " << result <<endl;	
	}
	

结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百万攻城狮

你的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值