2014-09-10 2 views
-1

Я новичок в 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 

Так есть ли способ обойти эту проблему? или я просто иду в неправильном направлении? Может быть, я должен использовать что-то вроде связанного списка или массив объектов? Или это проблема распределения памяти?

+1

Вы вообще не ищете конструктор [http://www.cprogramming.com/tutorial/constructor_destructor_ordering.html)? –

+0

Вы должны использовать конструктор. – MARS

+0

Извините, я не могу сформулировать свой вопрос ясно. Я пытался создать уникальные объекты, имя которых является пользователем. Пользователю просто нужно ввести имя, и объект с тем же именем будет автоматически создан. –

ответ

0

Значит, вы хотите, чтобы имя переменной , используемое в исходном коде, определялось строкой, введенной пользователем во время выполнения? Но если вы не знаете имя переменной заранее, когда вы пишете программу, вы не можете ссылаться на нее в программе и, следовательно, ничего с ней делать.

Это как если бы вы планировали отправиться в парк на следующей неделе, подойти к незнакомцам и спросить их имена и основать их имена, придумать конкретные шутки с их именами. Но вы хотите подумать о шутках для этих конкретных людей сейчас, а не на следующей неделе. Как вы можете узнать (прямо сейчас), какую шутку сказать, когда вы не знаете, что такое их имена?

Существует два способа сделать то, что вы хотите.

1) Знайте каждое возможное имя, которое можно ввести. В программе это было бы равнозначно сделать

student albert; 
student annie; 
student arthur; 
… 

student zach ; 
student zoe ; 

Это будет огромной тратой ресурсов, поскольку большинство имен никогда не будет введено. Кроме того, когда программа запускается, пользователи будут вводить строки, которые имеют значения «Билл», «Сара» и т. Д. Но между именем «Артур» и переменной student arthur нет встроенного/автоматического соединения. Таким образом, вы должны установить большой стол, как

switch (entered_name) 
     { 
     case “Annie”: 
      new_student = annie ; //the already existing object which we created above 
     case “Arthur” 
      new_student = arthur; 
    …. 
     } 

2) Или вы можете создать массив, который один с именем переменной, содержащей несколько элементов, которые могут быть решены с помощью индекса (номера), а не имя.

student students[1000] ; // students is a fixed-length array that can hold 1000 student objects 

Когда программа запускается, каждый из последовательно Введенное имя может быть назначен на name поле в следующем пункте в массиве, и этот объект становится запись для этого имени студента. Программа может ссылаться на отдельные объекты студента только как students[45]. Чтобы найти запись для Stephen, вам придется вручную искать элементы, чтобы найти тот, чье поле имени «Stephen»; но нет никакой переменной с именем stephen, доступной для программы, только переменная массива students.

Очевидно, что вариант 2 - это то, что вы хотите.

1

Имена вещей в вашей программе определяются во время компиляции. Кажется, вы хотите создать имя объекта во время выполнения (когда пользователь вводит что-то). Это не работает. Входы пользователя - это данные, а не имена переменных.

Смежные вопросы