Поскольку ваш класс Event
не имеет конструктора по умолчанию, вам необходимо явно создать каждый объект с его именем, поэтому единственный способ сделать это в настоящее время - это способ, которым вы сейчас занимаетесь.
Если вы добавите конструктор по умолчанию в Event
, вы можете сделать это как минимум двумя другими способами:
Если у вас всегда будет (небольшое) фиксированное количество объектов, вы можете просто объявить массивпостоянный размер:
Event events[2];
При этом автоматически создаются объекты при создании WhatTheyWant
, поэтому вам просто нужно задать имена впоследствии:
WhatTheyWant() {
events[0].SetName("Miss");
events[1].SetName("Dodge");
}
Если вы хотите иметьПеременное число событий, вы можете объявить один указатель и динамически выделить массив объектов:
Event *events;
И вы, вероятно, могли бы дать число в качестве параметра конструктору:
WhatTheyWant(int numEvents) {
events = new Event[numEvents];
for (int i = 0; i < numEvents; i++)
events[i]->SetName("...");
}
Кроме того, не имеет прямого отношения к вашему вопросу, но ваша переменная Mode
будет лучше смоделирована с использованием перечисления вместо char
.Использование enum
проясняет, что на самом деле означает переменная, вместо использования таких значений, как 0, 1 и 2. Например:
public:
enum ModeType { Ascending, Descending, None };
private:
ModeType Mode;
public:
Event() {
...
Mode = Ascending;
}
void SetMode(ModeType NewMode) {
Mode = NewMode;
}
ModeType ReturnMode() {
return Mode;
}