我是c ++的新手,正在尝试编写学生帐户管理软件。该课程如下:
class student{
private:
string name;
int student_id;
public:
void set_value(string in_name, int in_id);
};
现在我想创建学生,不使用:
student student1;
student1.set_value(xx,xx);
相反,我正在考虑用户只需要输入学生姓名的方式,并且将创建与学生姓名同名的对象。这样,用户不需要知道那些东西如何工作的点符号。问题是我无法通过编写来创建对象:
cout<<"enter the name of the student to create account"<<endl;
string name;
cin>>name;
student name; //Trying to create an object named with the user input but this statement is invalid
那么有什么方法可以解决这个问题吗?或者我只是朝错误的方向走?也许我应该使用链接列表或对象数组之类的东西?或者是内存分配问题?
答案 0 :(得分:1)
程序中的事物名称是在编译时确定的。您似乎想要在运行时创建对象名称(当用户输入内容时)。它不会那样工作。用户输入是数据,而不是变量名称。
答案 1 :(得分:0)
因此,您希望源代码中使用的变量名由用户在运行时输入的字符串确定吗?但如果您事先不知道变量的名称,那么在编写程序时,您无法在程序中引用它,因此可以对它执行任何操作。
如果你有计划下周去公园,走向一些陌生人,问他们的名字,并根据他们的名字,提出涉及他们名字的特定笑话。但你想想想那些特定的人现在的笑话,而不是下周。当你不知道他们的名字是什么时,你怎么能知道(现在)说什么玩笑?
有两种方法可以做你想做的事。
1)了解可输入的每个可能名称。在你的程序中,这相当于制作
student albert;
student annie;
student arthur;
…
student zach ;
student zoe ;
这将浪费大量资源,因为绝不会输入大多数名字。此外,当程序运行时,用户将输入具有“Bill”,“Sarah”等值的字符串。但是名称“Arthur”和变量{{1}之间没有内在/自动连接。 }。所以你必须设置一个像
这样的大表student arthur
2)或者你可以创建一个数组,它是一个包含多个元素的命名变量,可以通过索引(数字)来寻址,而不是名称。
switch (entered_name)
{
case “Annie”:
new_student = annie ; //the already existing object which we created above
case “Arthur”
new_student = arthur;
….
}
运行程序时,可以将每个连续输入的名称分配给数组中下一个项目中的student students[1000] ; // students is a fixed-length array that can hold 1000 student objects
字段,该对象将成为该指定学生的记录。该程序只能引用name
个别学生对象。要查找Stephen的记录,必须手动搜索元素以找到名称字段为“Stephen”的元素;但是程序没有名为students[45]
的变量,只有数组变量stephen
。
显然,选项2就是你想要的。