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

时间:2013-12-05 23:20:01

标签: c++ class variables instance names

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

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;

不用说 - 类Line有变量A,B和C.

例如,当用户输入“m 2 3 1”时,我想创建一个实例名称为“m”且A = 2的新行, B = 3,C = 1。 如果用户输入“s 2 2 2” - 创建一个Line实例“s”,其中A = 2,B = 2,C = 2,依此类推。 也许稍后如果用户添加已存在的行名称,他将收到错误消息。

那么,总结一下,任何人都可以告诉我用动态名称创建这种实例的正确方法吗?

提前谢谢你:]

2 个答案:

答案 0 :(得分:0)

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

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

#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;
  ..
}

答案 1 :(得分:0)

  

那么,总结一下,任何人都可以告诉我用动态名称创建这种实例的正确方法吗?

你做不到。您最接近的是使用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,则可以使用Line获取相应的vars["s"]对象。