I am looking to be pointed in the right direction.
I have 1 class Event
class Event{
private:
vector<string> Question;
char Mode;// 1 = Ascending 2 = Descending 3 = None
string EventName;
public:
Event(string Name){
EventName = Name;
SetQuestionSize();
SetQuestion();
Mode = 3;
}
void SetName(string NewName){
EventName = NewName;
}
void SetQuestionSize(){
Question.resize(15);
}
int ReturnQuestionSize(){
return Question.size();
}
void SetQuestion(){
Question[0]="Enter ";
Question[1]="1 ";
Question[2]="to ";
Question[3]="sort ";
Question[4]="in ";
Question[5]="ascending ";
Question[6]="order, ";
Question[7]="2 ";
Question[8]="for ";
Question[9]="Descending, ";
Question[10]="or ";
Question[11]="3 ";
Question[12]="to ";
Question[13]="ignore ";
Question[14]=EventName;
}
string ReturnQuestion(int Index){
return Question[Index];
}
/*vector<string> ReturnQuestion(){
return Question;
}*/
void SetMode(char NewMode){
if (NewMode == '0' || NewMode == '1' || NewMode == '2')
Mode = NewMode;
}
char ReturnMode(){
return Mode;
}
string ReturnName(){
return EventName;
}
};
This is will be a member of a second object, which will use Event’s functions to store data in Event’s members.
The problem I’m having is declaring an array of Event objects in my second object. When researching I came across ways to use an array of pointers to the first object, and some operator ‘->’ that I’m guessing is related to virtual functions.
class WhatTheyWant{
Event *events[2];
public:
WhatTheyWant(){
events[0]= new Event("Miss");
events[1]= new Event("Dodge");
}
};
I’m very ignorant about pointers, and I know I will have to learn them eventually, but are they the best way to go or is there a better.
Since your
Eventclass doesn’t have a default constructor, you need to explicitly construct each object with its name, so the way you’re doing it currently is the only way to do it.If you add a default constructor to
Event, you can do it in at least two other ways:If you will always have a (small) fixed number of objects, you can just declare an array of constant size:
Doing this will automatically construct the objects when
WhatTheyWantis created, so you just need to set the names afterwards:If you want to have a variable number of events, you can declare a single pointer and dynamically allocate an array of objects:
And you could probably give the number as a parameter to the constructor:
Also, not directly related to your question, but your
Modevariable would be better modeled using an enumeration instead of achar. Using anenummakes it clearer as to what the variable really means, rather than using values like 0, 1 and 2. For example: