【问题标题】:How to make a data member of a class unique for each instance of that class如何使该类的每个实例的类的数据成员唯一
【发布时间】: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


【解决方案1】:

您可以创建一个在每次赋值后递增的静态属性。所有实例的静态属性都相同。

【讨论】:

  • 我想创建一个静态变量来跟踪前一个变量,但我似乎无法让它与字符串一起使用,我似乎只能让它与整数一起使用。
  • @HermesÇati "ID-" + std::to_string(the_static_number)
  • @HermesÇati 您可以将字符串与整数值连接起来。
  • @Sara Sameer 我实际上试图将其保持为固定格式,只是让构造函数生成一个 3 位整数,然后与包含“ID-”部分的字符串连接,但问题是每隔一段时间它会生成相同的 3 位数字,但感谢您的帮助。
【解决方案2】:

这可能是上一个答案的意图,尽管只要构造一个对象,这个答案就会增加。这样一来,每件物品在生命中都会被赋予一个新的序列号。

class Department {
public:
    Department() {
        ID = "ID_" + std::to_string(IDcount);
        ++IDcount;
    }
    
    bool operator== (const Department& rhs) {
        return ID == rhs.ID;
    }

protected:
    string ID;
    static int IDcount;
};
int Department::IDcount = 0;

【讨论】:

    猜你喜欢
    • 2013-11-17
    • 2016-03-30
    • 1970-01-01
    • 2011-09-05
    • 2021-07-18
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多