【问题标题】:(C++) How can I keep track of how many objects of a class I declare?(C++) 如何跟踪我声明的类的对象数量?
【发布时间】:2021-06-22 02:59:30
【问题描述】:

假设我有一个类似这样的课程,我想跟踪有多少员工以及他们使用帐号系统的人员。我想知道这是否是一个愚蠢的想法,或者这是否很好,只是没有(到目前为止)正确实施。

class Employee {
private:
  long int accountNumber;
  static int currentTotal;
  static int lifetimeTotal;
  /* other member variables like name */
public:
  /* member functions, constructors, etc. */
};

我的想法是:

员工加入公司

我可以声明一个雇员,并在构造函数中有++currentTotal; ++lifetimeTotal;。这会将员工人数增加一。

员工离开公司

当有人不再在公司工作时,我可以以某种方式使用--currentTotal;。当前员工人数已减少 1,因此变量也应减少;但是,lifetimeTotal 不会递减。

我将如何减少这个?我应该使用某种虚拟员工并为其编写成员函数吗?或者也许对我声明的所有对象使用指针,以便我可以delete 他们?

员工帐号

我在想帐号可以半随机生成,其中一部分数字序列编码某种功能信息(他们在哪个部门工作,他们是否获得工资或薪水等),另一部分是由RNG确定,最后一位是校验位。但是,我想有办法确保不能重复使用帐号。我不知道如何实现这一点。

跟踪

当他们来来去去时,我如何准确地跟踪他们?我的第一个想法是向量或某种 ADT(我还不完全了解如何实现,但我明白了基本想法)。但是,如果我需要找到 John Doe 的薪水,我需要能够在可能有数千名其他员工的账户中搜索它(在我的模拟练习中,我只会有几十个)。

我真的不太了解基础知识之外的类/结构,因为到目前为止,我使用它们的经验只有继承、virtual 函数、const_caststatic_castoperator重载、friend 函数,以及我在网上找到的称为智能指针的东西,我可以声明ptr<Employee> worker1(new Employee( /* ... */ ));,而不是声明Employee worker1( /* ... */ );。我在示例中看到了很多我不知道该怎么做的东西。

我几乎可以肯定数组不是要走的路,因为它的大小是固定的,所以我认为向量更好。我真的不知道自己在做什么,如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 这能回答你的问题吗:How to keep track of C++ objects
  • 公司可能有一个std::vector<Employee>...
  • 在类中创建一个静态变量,并在您的构造函数中增加该静态变量。示例:class myClass { private: static int myCtr = 0; public: myClass() {myCtr++;} }
  • 是否必须使用静态变量来统计现有实例的数量? IMO 这将是相当混乱的,拥有一个包含 std::vector<Employee> 的 porper 类 Company 是一个更好的主意。
  • 有点基于意见,但更好的方法是将Employees 保留在一些集合中,例如std::unordered_setstd::vector

标签: c++ class object vector


【解决方案1】:

取决于你想要达到的目标:

一个。跟踪当前实例化了特定类(此处为:employee)的对象数量。您将实现一个静态成员计数器,该计数器在 所有 构造函数中递增并在析构函数中递减。

b.跟踪您的公司有多少员工(这与 (a) 完全不同,请考虑一下)。在这里,计数器应该是您的数据模型的一部分(您可能有一个 company 类,该类将通过其 hire()fire() 方法跟踪它)

【讨论】:

    猜你喜欢
    • 2018-11-18
    • 2013-02-15
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多