![](/img/trans.png)
[英]Creating a list to dynamically allocate objects in C++ based on user input
[英]Creating new class objects dynamically via user input in C++
我是 C++ 的新手。对于在线 class 中的期末项目,我正在编写一个程序,该程序本质上是一个虚拟时间卡,用于跟踪工作的工作时间。 我为我的代码中的任何明显缺陷道歉,它仍在进行中,这个 class 让我很快接受了很多新概念。
我有一个名为Employee
的 class,在那个 class 中我有一个名为newEmployee()
的 function,它允许用户注册一个新员工以供程序跟踪。 这是我的 header 文件的一部分:
class Employee {
private:
std::string Name;
double Pay;
bool Admin;
public:
Employee(std::string& name, double pay, bool admin);
void getInput();
void newEmployee();
void getStatus();
void clockIn();
int clockOut();
int timer();
int exportTimeSheet();
这是我对构造函数的实现:
Employee::Employee(std::string& name, double pay = 0.0, bool admin = false) {
Name = name;
Pay = pay;
Admin = admin;
}
我遇到的问题是,我不知道如何通过用户输入动态创建新的 class object。 newEmployee()
function 要求他们提供员工的姓名 ( string
)、他们的薪水 ( double
) 以及他们是否是管理员 ( boolean
)。
我熟悉在运行时使用new
和delete
关键字创建动态变量,但是如果 function 被用户多次调用,我如何将用户输入的字符串解析为 class 构造函数并动态创建多个新的唯一 class对象?
您需要一个 Employee 对象的容器——我建议使用一个 vector
std::vector<Employee> employees;
while (still getting input){
string name = get from input;
Employee emp(name,...);
employees.push_back(emp);
}
或者更好,使用指针(节省大量复制):
std::vector<Employee*> employees;
while (still getting input){
string name = get from input;
Employee *emp = new Employee(name,...);
employees.push_back(emp);
}
这里的缺点是您必须记住释放动态分配的所有 memory。
所以你可以改用智能指针:
using EmployeePtr = std::shared_ptr<Employee>;
std::vector<EmployeePtr> employees;
while (still getting input){
string name = get from input;
auto emp = std::make_shared<Employee>(name,...);
employees.push_back(emp);
}
要获取数据,您可以使用:
employees[n].Name (#1)
employees[n]->Name (#2 and #3)
你说newEmployee()
提示输入员工信息。 但是它的返回值是一个void
,所以它不能返回一个新的Employee
。 尝试更像这样的东西:
class Employee {
...
static Employee newEmployee();
...
};
Employee Employee::newEmployee() {
std::string name;
double pay;
bool admin;
// read in values as needed...
return Employee(name, pay, admin);
}
然后你可以这样做:
Employee emp = Employee::newEmployee();
// use emp as needed...
或者,如果您需要动态创建Employee
object:
class Employee {
...
static std::unique_ptr<Employee> newEmployee();
...
};
std::unique_ptr<Employee> Employee::newEmployee() {
std::string name;
double pay;
bool admin;
// read in values as needed...
return std::make_unique<Employee>(name, pay, admin);
}
然后你可以这样做:
auto emp = Employee::newEmployee();
// use emp as needed...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.