Cara agar variabel string yang dimasukkan pengguna menjadi nama objek baru di kelas

pemrograman


Saya mencoba membuat pengguna memasukkan variabel string nama objek baru.
saya ingin nama objek di kelas pesawat diambil dari pengguna. Apa pun yang saya coba membuat komputer berpikir saya ingin mendefinisikan ulang nama variabel yang saya berikan untuk menyimpan input pengguna dan menjadikannya nama objek yang sebenarnya, bukan nama objek yang disimpan dalam nama variabel. Saya pikir penunjuk mungkin jawabannya, tetapi saya baru saja mulai mempelajarinya dan tidak tahu cara menggunakannya dengan benar

Apa yang saya coba:

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

dan seperti yang disebutkan sebelumnya, saya mencoba menjadikan penerbangan sebagai penunjuk sebelum baris terakhir tetapi tidak berhasil, mungkin saja saya menyalahgunakan petunjuk 🙁

Solusi 1

Nama suatu objek dapat disimpan dalam variabel anggota di kelas. Dalam kasus Anda, tampilannya akan seperti ini:

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

MyClass Airplane;
cin >> Airplane.flight;

Solusi 2

Nama variabel tidak benar-benar ada saat kode Anda berjalan: mereka digunakan oleh kompiler untuk membuat lokasi penyimpanan yang mungkin ada di memori, namun mungkin seluruhnya berada di dalam prosesor yang memiliki sekumpulan besar register yang tidak ada hubungannya dengan memori . Nama sebenarnya yang Anda berikan akan ditetapkan saat Anda mengkompilasi aplikasi, dan dibuang saat file EXE yang Anda jalankan dibuat.

Anda tidak dapat “membuat variabel” saat kode Anda berjalan, Anda membuat lokasi penyimpanan (misalnya di heap) dan menyimpan lokasi itu dalam variabel atau koleksi (referensi yang disimpan dalam variabel ).

Bayangkan variabel seperti buku: buku memiliki judul (variabel memiliki nama), dan Anda dapat memiliki banyak buku di rak (banyak variabel dalam aplikasi), namun untuk menambahkan informasi ke dalamnya Anda tidak secara ajaib membuat yang baru buku, Anda membuka yang sudah ada dan menulis di halaman. Buku adalah variabel dalam kode Anda, halaman adalah lokasi penyimpanan di dalam buku – dan sama seperti Anda menambahkan informasi dengan mencari halaman kosong untuk menulis, dalam kode Anda menambahkan lokasi penyimpanan baru ke daftar (misalnya) dan menyimpan informasi di dalamnya.

Kelas berisi anggota yang dapat menyertakan nama, alamat, usia, tujuan, dan sebagainya – jadi Anda membuat instance kelas dan mengisi informasi individualnya untuk setiap pengguna yang ingin Anda tambahkan ke aplikasi Anda!

Solusi 3

Sebagai Griff menyatakan, Anda tidak bisa melakukan itu.
Alternatifnya bisa menggunakan unordered_map untuk menghubungkan string yang disediakan pengguna ke objek yang baru dibuat. Mencoba

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をコピーしました