根据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; //员工最多人数,即动态数组的大小
};