我想通过获取用户输入来生成即将初始化的对象的名称。这可能吗?有没有办法根据变量值命名对象?
我知道在下面的代码中“test x”不起作用,我知道为什么......但有没有办法让它工作?我一直试图弄清楚它2天了。我最接近的可能是串流......或者甚至更糟......这是不可能的?有什么帮助吗?
#include <iostream>
using namespace std;
#include <string>
class test
{
public:
string wtf;
};
int main()
{
test y; // showing normal initialize
y.wtf = "a"; // assign value
string x;
cin >> x; // initialize string and get input
test x // trying to initialize object based on input
x.wtf = "a"; // then assign a value
cout << y.wtf; // printing both to test
cout << x.wtf;
return 0;
}
我的意图是拥有一个包含员工编号的单个数组(与“emp”或开头的某些内容连接在一起),以便为每个员工启动对象。所以用户会输入一个员工编号,比如1234,我会创建一个添加了emp + 1234的字符串,然后输出“emp1234”...然后我会启动一个像“test emp1234”这样的对象,这将有一堆在课堂内与其相关的差异变量。
我可能会看到这一切都错了......并且可能解释得相当蹩脚。我显然是新手,但我可以尽可能使用任何帮助。
答案 0 :(得分:0)
我会这样做:
#include <vector>
#include <string>
#include <iostream>
#include <stdexcept>
test make_test()
{
std::string s;
if (!(std::cin >> s))
{
throw std::runtime_error("Premature end of input");
}
return { "emp" + s };
}
int main()
{
std::vector<test> v;
for (int i = 0; i != 10; ++i)
{
v.push_back(make_test());
std::cout << "Added employee '" << v.back().wtf << "'\n";
}
}
这将填充包含10个员工记录的向量。
答案 1 :(得分:0)
不,您无法在运行时创建变量名,因为名称在运行时不存在。它们是静态结构,仅在编译期间有用。
然而,听起来你只想要一个std::map
。您可以使用它从整数(员工编号)映射到test
对象:
std::map<int, test> employees;
int employeeNumber;
std::cin >> employeeNumber;
employees[employeeNumber]; // Will default construct a test object mapped to employeeNumber
// Alternatively:
test t( /* some constructor args */ );
employees[employeeNumber] = t;
然后,如果您想访问员工编号为test
的{{1}}对象,您可以执行以下操作:
1234