c++中的函数对象《未完成》

头文件:

#pragma once
#include<iostream>
#include<vector>
using namespace std;
class Student
{
public:
    Student(double hei):height(hei){}
    double getheight() const { return height; }
    ~Student(){}
private:
    double height;
};

vector<Student> s;
for(int i=0;i<5;i++)
    s.???
// 定义一个函数对象类
// 用于统计容器中所有Student对象的身高
class AverageHeight
{
public:
    // 构造函数,对类的成员变量作合理的初始化
    AverageHeight()
        : m_nCount(0), m_nTotalHeight(0) {};
    // 定义函数调用操作符“()”,
    // 在其中完成统计的功能
    void operator () (const Student& st)
    {
        // 将当前对象的身高累加到总身高中
        // 这里的m_nTotalHeight记录了上次累加的结果,
         // 这就是函数那失去的记忆
        m_nTotalHeight += st.getheight();
        // 增加已经统计过的Student对象的数目
        ++m_nCount;
    }
    // 接口函数,获得所有统计过的Student对象的平均身高
    float GetAverageHeight()
    {
        if (0 != m_nCount)
            return (float)GetTotal() / GetCount();
    }
    // 获得函数对象类的各个成员变量
    int GetCount() const
    {
        return m_nCount;
    }
    int GetTotal() const
    {
        return m_nTotalHeight;
    }
    // 函数对象类的成员变量,
    // 用来保存函数执行过程中的状态数据
private:
    int m_nCount;  // 记录已经统计过的对象的数目
    int m_nTotalHeight;  // 记录已经统计过的身高总和
};

源文件:

#include"wuyong.h"
using namespace std;
int main()
{
    // 创建函数对象
    AverageHeight ah;
    // 将函数对象应用到for_each()算法中以完成统计
    ah = for_each(vecStu.begin(), vecStu.end(), ah);
    // 从函数对象中获取它的记忆作为结果输出
    cout << ah.GetCount() << "个学生的平均身高是:"
        << ah.GetAverageHeight() << endl;
    system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/yibeimingyue/p/10556763.html

时间: 2024-10-18 15:21:13

c++中的函数对象《未完成》的相关文章

C++中的函数对象(一)

STL中的函数对象,大多数STL类属算法(以及某些容器类)可以以一个函数对象作为参数.引入函数对象的目的是为了使算法的功能富于变化,从而增强算法的通用性. 所谓函数对象,是指一段代码实体,它可以不带参数,也可以带有若干参数,其功能是获得一个值,或者改变操作的状态.在C++编程中,任何普通的函数都满足这个定义,而且,任何一个重载了运算符operator()的类的对象也都满足这一定义,称为函数对象. 普通函数 int multfun(int x, int y) { return x*y; } 或者下

C++手稿:STL中的函数对象与函数指针

先来感受一下C++中的函数对象和函数指针: template<typename T> void printer(int a, int b, T func){ cout<<func(a, b)<<endl; } 在STL中定义了很多像上面这样的模板,这里的T是一个可调用(实现了括号运算符)的东西. 这使得我们在使用模板时可以指定一个计算策略,它可以是函数对象,也可以是函数指针. Less<int>便是一个常见的函数对象,常用来配置容器或算法.<funct

Python中的函数对象与闭包

函数在Python中是第一类对象,可以当做参数传递给其他函数,放在数据结构中,以及作为函数的返回结果. 下面的例子为接受另外一个函数作为输入并调用它 1 #foo.py 2 def callf(func): 3 return func() 使用上面的函数: 1 import foo 2 def helloworld(): 3 return 'Hello,World' 4 5 print foo.callf(helloworld) >>>‘Hello,World’ 2.把函数当做数据处理时

js中的函数对象

JavaScript三种定义函数方法: {}表示函数体1.第一种是使用function语句定义函数 function func() { } 2.第二种是使用Function()构造函数来定义函数(不常用) var 函数名 = new Function("参数1","参数2","参数3"--"函数体"); var sum = new Function("x","y","var z

C++模板中的函数对象

在C++模板类map中一个参数为Compare类型,该类型为一个比较函数,其完整定义如下: template< class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const Key, T> > > class map; 函数作为类进行传递,该类采用了重载操作符()来实现函数指针到类的转变.在实际中也可以仿照此风格写自己的

3.2 STL中的函数对象类模板

*: STL中有一些函数对象类模板,如下所示: 1)例如要求两个double类型的x 和y 的积,可以: multiplies<double>()(x,y); 该表达式的值就是x*y的值. 2)less是STL中最常用的函数对象类模板,其定义如下: template<class _Tp> struct less { bool oprator()(const _Tp&_x,const _Tp&_y)const { return _c<_y; } } 要判断两个i

Python中通过函数对象创建全局变量

先看下面这段代码,显然无法work. 因为代码试图在TestVariableScope()中引用一个没有被定义的变量a.所以必须报错,如下图-1. 不过如果你将第2行代码注释掉.代码就能跑通了,如图-2. 问题1来了:TestVariableScope.a 不是也没有被定义吗,为什么可以work呢?解释如下:先看代码第8行,TestVariableScope.a在SetVariable方法中被定义了,SetVariable()又 在TestVariableScope()前被调用.所以TestVa

python中的函数对象的内存地址是多少

今天和同学讨论一个问题,发现了函数的内存地址和我想象的不一样. 我以为同一个函数,假如给的参数不一样,那么这两个函数的id就不一样. 然后经过实验,发现python为了便于管理函数,所有的函数都放在同一片内存空间里面. func函数是我定义的一个函数,从结果可以看到func函数和print函数的内存地址是一样的. 这应该是python底层定义的,为了便于管理Python的各种函数和自己项目中定义的函数,可以想到,也许其他的地方也是这个管理机制呢. 原文地址:https://www.cnblogs

STL 算法中函数对象和谓词

STL 算法中函数对象和谓词 函数对象和谓词定义 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)"的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待.          这是通过重载类的operator()来实现的.          "在标准库中,函数对象被广泛地使用以获得弹性",标准库中的很多算法都可以使用函数