随笔 - 1762  文章 - 0  评论 - 109  阅读 - 431万

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;  // 记录已经统计过的身高总和
};
View Code
复制代码

源文件:

复制代码
#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;
}
View Code
复制代码

 

posted on   一杯明月  阅读(153)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示