【C++】重载下标运算符(关键字到值的映射)

根据StaffList类,编写它的下标运算符的重载

StaffList类:

class StaffList
{
    friend ostream& operator<<(ostream& o, const StaffList& s1);
public:
    //构造函数
    StaffList(int max = 10) :MaxSize(max), count(0)  //当前员工数为0
    {
        IdArr = new string[MaxSize];  //创建id的动态数组
        NameArr = new string[MaxSize];  //创建姓名的动态数组
    }
    //析构函数
    ~StaffList()
    {
        delete[] IdArr;
        delete[] NameArr;
    }
private:
    string* IdArr;  //员工id
    string* NameArr;  //员工姓名
    int count;   //当前员工数
    const int MaxSize;  //员工最多人数,即动态数组的大小
};

ostream& operator<<(ostream& o, const StaffList& s1)
{
    for (int i = 0; i < s1.count; i++)
    {
        cout << s1.IdArr[i] << ":" << s1.NameArr[i] << endl;
    }
    return o;
}

mian函数里的测试代码:

int main()
{   
    StaffList s1;
    //插入两条信息
    s1["A001"] = "Bob";
    s1["A002"] = "Klieam";
    cout << s1;
    cout << "-------------" << endl;

    //修改信息
    s1["A001"] = "Alice";
    s1["A002"] = "Kira";
    s1["A003"] = "David";
    cout << s1;
    return 0;
} 

运行效果: 

 

最终代码: 

class StaffList
{
    friend ostream& operator<<(ostream& o, const StaffList& s1);
public:
    //构造函数
    StaffList(int max = 10) :MaxSize(max), count(0)  //当前员工数为0
    {
        IdArr = new string[MaxSize];  //创建id的动态数组
        NameArr = new string[MaxSize];  //创建姓名的动态数组
    }
    //析构函数
    ~StaffList()
    {
        delete[] IdArr;
        delete[] NameArr;
    }
    //重载的下标运算符
    string& operator[](const string& id)
    {
        int i;
        for (i = 0; i < count; i++)
        {
            if (IdArr[i] == id)
            {
                return NameArr[i];
            }
        }
        IdArr[i] = id;
        count++;
        return NameArr[i];
    }
private:
    string* IdArr;  //员工id
    string* NameArr;  //员工姓名
    int count;   //当前员工数
    const int MaxSize;  //员工最多人数,即动态数组的大小
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值