如何获取用户输入的字符串变量作为类中新对象的名称


我正在尝试获取用户输入的字符串变量作为新对象的名称。
我希望从用户那里获取飞机类中的对象的名称。 我尝试的任何操作都会让计算机认为我想重新定义用于存储用户输入的变量名称,并使其成为对象的实际名称,而不是对象的名称存储在变量名称中。 我认为指针可能是答案,但我刚刚开始研究这些,不知道如何正确使用它

我尝试过的:

C++
string flight;
cin>> flight;
Airplane flight;

正如前面提到的,我尝试在最后一行之前将 Flight 设置为指针,但这不起作用,这可能是我滥用了指针:(

解决方案1

对象的名称可以存储在类的成员变量中。 在你的情况下,它可能看起来像这样:

C++
class MyClass {
public:
    string flight;
};

MyClass Airplane;
cin >> Airplane.flight;

解决方案2

变量名在代码运行时并不真正存在:编译器使用它们来创建存储位置,这些存储位置可能位于内存中,但可能完全位于处理器内,该处理器具有大量与内存无关的寄存器。 您为它们指定的实际名称在编译应用程序时是固定的,并且在创建您运行的 EXE 文件时会被丢弃。

当代码运行时,您无法“创建变量”,您可以创建一个存储位置(例如在堆上)并将其位置存储在变量或集合中(对存储在变量中的引用) )。

想像书籍这样的变量:书有一个标题(变量有一个名称),书架上可以有很多书(应用程序中有很多变量),但要向其中添加信息,您不会神奇地创建一个新的书。书时,您打开现有的一本并在一页上书写。 书籍是代码中的变量,页面是书中的存储位置 – 就像您通过查找空白页来书写来添加信息一样,在代码中,您可以将新的存储位置添加到列表(例如)并存储的信息。

该类包含的成员可以包括姓名、地址、年龄、目的地等 – 因此您可以创建该类的一个实例,并为要添加到应用程序的每个用户填写其个人信息!

解决方案3

作为 格里夫 声明,你不能这样做。
另一种选择是使用 unordered_map 将用户提供的字符串链接到新构造的对象。 尝试

C++
#include <iostream>
#include <unordered_map>
using namespace std;


class Airplane
{
  unsigned tons;
public:
  Airplane(unsigned tons):tons(tons){}
  Airplane():Airplane{100}{}
  unsigned get_tons() const {return tons;}
};


int main()
{
  string ap_name;
  unsigned ap_tons;
  unordered_map<string, Airplane> m_ap;

  m_ap.emplace( "plane1", 100 );
  m_ap.emplace( "plane2", 120 );
  m_ap.emplace( "plane3", 130 );

  // example of look-up by name
  cout << "weight of plane2 is " << m_ap["plane2"].get_tons() << "\n";


  // user will name next airplane
  cout << "name your airplane: ";
  cin >> ap_name;
  cout << "specify its weight (tons): ";
  cin >> ap_tons;

  m_ap.emplace( ap_name, ap_tons );


  for (auto const & [name, plane] : m_ap )
    cout << "m_ap[" << name << "] weights " << plane.get_tons() << "\n";
}

コメント

タイトルとURLをコピーしました