【发布时间】:2021-01-29 11:56:27
【问题描述】:
这是我编写的程序的代码,除了它只有一个要求的部分外,一切都完美无缺。类 Department 的 ID 数据成员对于该类的每个实例应该是唯一的。我尝试使用运算符重载来比较创建的部门的 ID。但是这样做的问题是,应该在程序的主驱动中进行比较,并且需要在类的构造函数中或类内部进行。
Here is the code
class Department {
public:
Department(string id) {
ID = id;
}
bool operator== (const Department& rhs) {
return ID == rhs.ID;
}
friend ostream& operator<<(ostream& out, const Department& value);
protected:
string ID;
};
ostream& operator<<(ostream& out, const Department& value)
{
out << value.ID;
return out;
}
int main() {
Department d1("ID-1");
Department d2("ID-1");
if (d1 == d2) {
cout << "They are the same";
}
else {
cout << "No the same";
}
}
【问题讨论】:
-
如果构造函数自己生成id会更容易,那么你可以确保它们是唯一生成的。如果没有,您将需要存储已保留 ID 的全局存储或存储指向部门的指针,您将在
Department的构造函数和析构函数中进行管理。 -
构造函数如何能够自己生成ID我不明白。
-
好吧,假设部门获得像
"ID-1"、"ID-2"、"ID-3"... 之类的 ID。这可以简单地通过代码生成,您甚至不必验证没有重复,您只需知道每个生成的名称都是不同的。但是,如果部门获得更多的人名,例如"Finance","HR","Management",那么您无法生成此类名称,您需要全局存储用于验证是否没有其他部门已经拥有此类 ID。 -
好吧,我只需要确保 ID 是唯一的,那么我该如何在代码中实现它。因为这意味着创建一个返回特定格式字符串的函数。
-
@jignatius 我实际上使用了一个向量来存储所有记录的 ID,并运行二进制搜索以查看它是否存在,如果存在则它要求覆盖重复的 ID。谢谢!
标签: c++ class operator-overloading