用于在c ++中创建对象的接口

时间:2014-09-10 00:42:06

标签: c++

我是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

那么有什么方法可以解决这个问题吗?或者我只是朝错误的方向走?也许我应该使用链接列表或对象数组之类的东西?或者是内存分配问题?

2 个答案:

答案 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就是你想要的。