You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历Salesman类所有对象打印销售员姓名并计算平均薪资

解决方案

你可以通过以下两种常用方案实现Salesman类所有实例的遍历需求:

方案1:用std::vector统一管理对象(推荐新手使用,无需修改原有类结构)

这种方式不需要改动你现有的Salesman类定义,只需要在创建对象时统一存入容器即可,管理更灵活,也不容易出现内存泄漏问题。
修改后的完整代码如下:

#include <string>
#include <iostream>
#include <vector> // 引入vector容器头文件

class Salesman
{
private:
    int salesmanId;
    std::string salesmanName;
    int salary;
    std::string contactNumber;

public:
    Salesman();
    ~Salesman();
    void setSalesmanDetails(int id, std::string name, int sal, std::string number);
    void displaySalesmanDetails();
    void setSalesmanContactNumber(std::string number);
    // 新增两个getter方法,用于外部获取姓名和薪资
    std::string getName() { return salesmanName; }
    int getSalary() { return salary; }
};

void Salesman ::setSalesmanDetails(int id, std::string name, int sal, std::string number)
{
    salesmanId = id;
    salesmanName = name;
    salary = sal;
    contactNumber = number;
}

void Salesman ::displaySalesmanDetails()
{
    std::cout << "Salesman ID: " << salesmanId << std::endl;
    std::cout << "Salesman Name: " << salesmanName << std::endl;
    std::cout << "Salary: " << salary << std::endl;
    std::cout << "Contact Number: " << contactNumber << std::endl
         << std::endl;
}

void Salesman::setSalesmanContactNumber(std::string number)
{
    contactNumber = number;
}

Salesman::Salesman()
{
}

Salesman::~Salesman()
{
}

int main(int argc, char *argv[])
{
    // 用vector存储所有Salesman对象
    std::vector<Salesman> salesTeam;
    // 批量创建1000个对象演示,这里你可以替换为实际的数据源读取逻辑
    for(int i = 0; i < 1000; i++) {
        Salesman s;
        s.setSalesmanDetails(i+1, "员工" + std::to_string(i+1), 30000 + rand()%20000, "1380000" + std::to_string(1000+i));
        salesTeam.push_back(s);
    }

    // 遍历打印所有销售员姓名
    std::cout << "所有销售员姓名:" << std::endl;
    for(const auto& s : salesTeam) {
        std::cout << s.getName() << std::endl;
    }

    // 计算平均薪资
    long long totalSalary = 0;
    for(const auto& s : salesTeam) {
        totalSalary += s.getSalary();
    }
    double avgSalary = (double)totalSalary / salesTeam.size();
    std::cout << "平均薪资:" << avgSalary << std::endl;

    return 0;
}

方案2:类内置静态容器自动跟踪所有实例

如果需要让类自动管理所有创建的实例,不需要外部手动存入容器,可以在类中添加静态成员变量存储所有实例的指针:
你需要在原有类中添加以下内容:

#include <vector>
#include <algorithm>
class Salesman
{
private:
    // 原有私有成员不变
    static std::vector<Salesman*> allInstances; // 静态容器存储所有实例指针
public:
    // 原有公有成员不变
    Salesman() {
        allInstances.push_back(this); // 构造时自动加入容器
    }
    ~Salesman() {
        // 析构时自动从容器移除
        auto it = std::find(allInstances.begin(), allInstances.end(), this);
        if(it != allInstances.end()) allInstances.erase(it);
    }
    // 静态方法获取所有实例
    static const std::vector<Salesman*>& getAllInstances() {
        return allInstances;
    }
};
// 类外初始化静态成员
std::vector<Salesman*> Salesman::allInstances = {};

之后你在任何位置都可以直接通过Salesman::getAllInstances()获取所有实例的列表,直接遍历即可。

注意:该方案需要注意线程安全问题,且如果你用new创建对象,需要手动delete避免内存泄漏。

内容的提问来源于stack exchange,提问作者Rohan Jayaraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:15:02