Мне интересно, как я могу установить имя экземпляра класса в качестве переменной. Вот код, который я получил до сих пор:
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.
Так например — когда пользователь входит «м 2 3 1» Я хочу создать новую строку с именем экземпляра «М» и А = 2, В = 3, С = 1.
Если пользователь должен был войти «s 2 2 2» — создать экземпляр Line «S» с A = 2, B = 2, C = 2 и т. д.
И, возможно, позже, если пользователь добавит имя строки, которая уже существует, он получит сообщение об ошибке.
Итак, чтобы подвести итог, может кто-нибудь сказать мне правильный способ создания такого рода экземпляров с динамическими именами?
Заранее спасибо : ]
Поскольку имена переменных являются просто именами типов для взаимодействия человека с исходным кодом, вы не можете сделать это напрямую.
Самый простой способ — использовать карту (которая в основном является ассоциативным массивом, на самом деле это не так, а то, что вам нужно знать для решения своей задачи), чтобы получить то, что вам нужно:
#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;
..
}
Итак, чтобы подвести итог, может кто-нибудь сказать мне правильный способ создания такого рода экземпляров с динамическими именами?
Ты не можешь Самое близкое, что вы можете получить, это использовать 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"]
,