【发布时间】: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_cast 和static_cast、operator重载、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_set或std::vector。