如何将类实例名称设置为变量(C++)

How to Set a Class Instance Name to a Variable (C++)

本文关键字:变量 C++ 设置 实例      更新时间:2023-10-16

我想知道如何将类实例的名称设置为变量。这是我目前掌握的代码:

char line;
int A, B, C;
cout << "Enter a name and an equation for the line (example: g 5 2 1):" << endl;
cin >> line >> A >> B >> C;
Line line;
line.A = A;
line.B = B;
line.C = C;
cout << line << ": " << A << "x + " << B << "y + " << C << " = 0" << endl;
return 0;

不用说,class Line有变量A、B和C。

例如,当用户输入"m 2 3 1"时,我想创建一个新的Line,其实例名为"m",a=2,B=3,C=1。如果用户要输入"s 2 2 2"-创建一个具有a=2、B=2、C=2的Line实例。也许以后,如果用户添加了一个已经存在的行名,他会收到一条错误消息。

总之,有人能告诉我用动态名称创建这种实例的正确方法吗?

提前感谢:]

由于变量名称只是用于与源代码交互的编译类型名称,因此不能直接执行。

最简单的方法是使用映射(它基本上是一个关联数组,不,实际上不是,但根据你需要知道的问题,它是)来获得你需要的:

#include <map>
std::map<string, Line> lines;
Line line = Line(A,B,C)
string name = "lineName";
lines[name] = line;
...
std::map<string,Line>::iterator it = lines.find(name);
if (it != lines.end())
{
  const Line& line = it->second;
  ..
}

总之,有人能告诉我用动态名称创建这种实例的正确方法吗?

你不能。你能得到的最接近的是使用std::map:

std::map<std::string, Line> vars;
int a = 0;
int b = 0;
int c = 0;
std::string name;
std::cin >> name >> a >> b >> c;
vars.emplace(std::make_pair(name, Line { a, b, c }));

如果输入s 1 2 3,则可以使用vars["s"]获得相应的Line对象。