【问题标题】:How to Set a Class Instance Name to a Variable (C++)如何将类实例名称设置为变量 (C++)
【发布时间】:2013-12-05 23:20:01
【问题描述】:

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

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 等等. 以后如果用户添加一个已经存在的行名,他可能会收到一条错误消息。

那么,总结一下,谁能告诉我用动态名称创建这种实例的正确方法?

提前谢谢你:]

【问题讨论】:

  • 给它一个name 字段?您也可以考虑使用std::mapstd::unordered_map;这听起来像您正在尝试使用动态命名的变量,这通常是个坏主意。

标签: c++ class variables instance names


【解决方案1】:

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

最简单的方法是使用映射(它基本上是一个关联数组,实际上不是,而是根据您需要了解的问题)来获取您需要的内容:

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

【讨论】:

    【解决方案2】:

    那么,总结一下,谁能告诉我用动态名称创建这种实例的正确方法?

    你不能。您可以获得的最接近的是使用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对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 2022-01-22
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多