已关闭,该问题需要details or clarity,目前不接受回答。
**想要改进此问题?**通过editing this post添加详细信息并澄清问题。
2天前关闭。
Improve this question
我试图用一个构造函数创建同一个类的多个对象,但是用户输入了大量的对象。我尝试了很多方法,但是我不知道如何用一个构造函数创建多个不同的对象,因为我不能使用带有对象名称的变量(我试图在for循环中做到这一点)。
void addusr()
{
int p, age, time, salary;
string name, surname, position;
cout << "Input amount of workers to add: ";
cin >> p;
vector<Worker> workers;
for (int i = 1; i <= p; i++)
{
cout << "Worker number: " << i+1 << endl;
cout << "Name: ";
cin >> name;
cout << "Surname: ";
cin >> surname;
cout << "Position: ";
cin >> position;
cout << "age: ";
cin >> age;
cout << "Time: ";
cin >> time;
cout << "salary: ";
cin >> salary;
workers.push_back(Worker(name, surname, position, age, time, salary));
}
这是一个类:
#include<string>
using namespace std;
class Worker
{
public:
string name;
string surname;
string position;
//SETTERY -------------------------------------------------------------------------------------------------------
void setAge(int _age);
void setTime(int _time);
void setSalary(int _salary);
//GETTERY--------------------------------------------------------------------------------------------------------
int getAge();
int getTime();
int getSalary();
Worker(string name, string surname, string position, int age, int time, int salary);
private:
int age;
int time;
int salary;
};
和构造器:
#include "Worker.h"
void Worker::setAge(int _age)
{
age = _age;
}
void Worker::setTime(int _time)
{
time = _time;
}
void Worker::setSalary(int _salary)
{
salary = _salary;
}
//GETTERY ------------------------------------
int Worker::getAge()
{
return age;
}
int Worker::getTime()
{
return time;
}
int Worker::getSalary()
{
return salary;
}
Worker::Worker(string _name, string _surname, string _position, int _age, int _time, int _salary)
{
string name = _name;
string surname = _surname;
string position = _position;
int age = _age;
int time = _time;
int salary = _salary;
}
1条答案
按热度按时间t40tm48m1#
您所展示的代码创建了用户指定数量的
Worker
对象,正如预期的那样。然而,你的
Worker()
构造函数是有缺陷的,因为它将输入值赋给了 * 局部变量 * 而不是 * 类成员 *,所以你创建的每个Worker
对象最终都会持有空的/未初始化的字段值。你可以通过 either 来解决这个问题:另外,请注意,循环中的
Worker number:
输出消息显示了错误的数字(它将第一个worker显示为2
,而不是1
,等等)。您可以通过 either 来解决这个问题:for (int i = 1; i <= p; i++)
致:
for (int i = 0; i < p; i++)
i+1
更改为i
。最后,虽然
workers.push_back(Worker(...));
可以工作,但它创建了一个 temporaryWorker
对象传递给vector
,然后vector
存储该对象的 * 副本 *。如果使用workers.emplace_back()
,它将直接在vector
中构造一个新的Worker
对象,避免临时和副本,例如: