【解決方法】ユーザーが入力した文字列変数をクラス内の新しいオブジェクトの名前として取得する方法


ユーザーが入力した文字列変数、新しいオブジェクトの名前を取得しようとしています。
クラス飛行機のオブジェクトの名前をユーザーから取得したいと考えています。 私が何をしようとしても、コンピューターは、ユーザー入力を保存するために指定した変数名を再定義して、変数名に保存されているオブジェクトの名前ではなく、オブジェクトの実際の名前にしたいと考えます。 ポインタが答えかもしれないと考えていますが、それらを使い始めたばかりで、それを正しく使用する方法がわかりません

私が試したこと:

C++
string flight;
cin>> flight;
Airplane 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をコピーしました