I am learning c++ now and have encountered a problem in trying to create single digit addition, multiplication and subtraction math questions. The numbers used in the questions are randomly generated from 1 to 9 and when I try to print the answer for the corresponding question, I get a 0 for it which is not correct. The following are my codes. I would be very grateful if someone can give me some pointers on my code. If you have any suggestion in how I can improve my coding, I am very open to it. Thank you.

```
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
class onedQuestion
{protected:
int ifirstOperand;
int isecondOperand;
int ianswer;
public:
//Constructor
onedQuestion(int first=0, int second=0, int answer=0)
:ifirstOperand(first),isecondOperand(second),ianswer(answer)
{//cout<<"I am a onedQuestion"<<endl;
}
//Mutator
void setOperands();
//Accessor
int getFirst(){return ifirstOperand;}
int getSecond(){return isecondOperand;}
virtual int getAnswer(){return (0);}
//Display
virtual void printQuestion()
{cout<<"Please choose your operator!!"<<endl;}
virtual void printAnswer()
{cout<<"Ans: "<<ianswer;}
};
/*---------------------------------------------------------*/
void onedQuestion::setOperands()
{ ifirstOperand=1+rand()%9;
isecondOperand=1+rand()%9;
}
/***********************************************************/
class onedAddition: public onedQuestion
{public:
//Constructor
onedAddition(int first=0, int second=0, int answer=0)
:onedQuestion(first, second, answer)
{//cout<<"I am a onedAddition"<<endl;
}
//Accessor
int getAnswer(){return ifirstOperand+isecondOperand;}
//Display
void printQuestion()
{cout<<ifirstOperand<<" + "<<isecondOperand<<" = ";
}
void printAnswer()
{cout<<"Ans: "<<ianswer;}
};
/***********************************************************/
class onedMultiplication: public onedQuestion
{public:
//Constructor
onedMultiplication(int first=0, int second=0, int answer=0)
:onedQuestion(first, second, answer)
{//cout<<"I am a onedMultiplication"<<endl;
}
//Accessor
int getAnswer(){return ifirstOperand*isecondOperand;}
//Display
void printQuestion()
{cout<<ifirstOperand<<" x "<<isecondOperand<<" = ";
}
void printAnswer()
{cout<<"Ans: "<<ianswer;}
};
/***********************************************************/
class onedSubtraction: public onedQuestion
{public:
//Constructor
onedSubtraction(int first=0, int second=0, int answer=0)
:onedQuestion(first, second, answer)
{//cout<<"I am a onedSubtraction"<<endl;
}
//Accessor
int getResult(){return ifirstOperand-isecondOperand;}
//Display
void printQuestion()
{cout<<ifirstOperand<<" - "<<isecondOperand<<" = ";
}
void printAnswer()
{cout<<"Ans: "<<ianswer;}
};
/***********************************************************/
//Functions
void genQuestion(onedQuestion &question)
{question.setOperands();
question.printQuestion();
}
void genAnswer(onedQuestion &inanswer)
{ inanswer.getAnswer();
inanswer.printAnswer();
}
/***********************************************************/
int main()
{srand((unsigned)time(0));
onedAddition add;
onedSubtraction minus;
onedMultiplication times;
cout<<"Generating 20 addition problems"<<endl;
cout<<endl;
for(int i=0;i<20;i++)
{ cout<<i+1<<") ";
genQuestion(add);
cout<<setw(30);
genAnswer(add);
cout<<endl;
}
cout<<"Generating 20 subtraction problems"<<endl;
cout<<endl;
for(int i=0;i<20;i++)
{cout<<i+1<<") ";
genQuestion(minus);
cout<<setw(30);
genAnswer(minus);
cout<<endl;
}
cout<<"Generating 20 multiplication problems"<<endl;
cout<<endl;
for(int i=0;i<20;i++)
{cout<<i+1<<") ";
genQuestion(times);
cout<<setw(30);
genAnswer(times);
cout<<endl;
}
return 0;
}
```

Output:

Generating 20 addition problems

1) 9 + 6 = Ans: 0

2) 8 + 9 = Ans: 0

3) 8 + 5 = Ans: 0

4) 7 + 1 = Ans: 0

5) 4 + 3 = Ans: 0

6) 4 + 7 = Ans: 0

7) 1 + 6 = Ans: 0

8) 2 + 8 = Ans: 0

9) 3 + 8 = Ans: 0

10) 9 + 5 = Ans: 0

11) 9 + 5 = Ans: 0

12) 1 + 2 = Ans: 0

13) 7 + 9 = Ans: 0

14) 7 + 8 = Ans: 0

15) 4 + 7 = Ans: 0

16) 1 + 4 = Ans: 0

17) 1 + 6 = Ans: 0

18) 1 + 9 = Ans: 0

19) 8 + 7 = Ans: 0

20) 7 + 9 = Ans: 0

Generating 20 subtraction problems

1) 1 - 1 = Ans: 0

2) 6 - 8 = Ans: 0

3) 7 - 7 = Ans: 0

4) 6 - 7 = Ans: 0

5) 3 - 4 = Ans: 0

6) 1 - 1 = Ans: 0

7) 6 - 8 = Ans: 0

8) 2 - 1 = Ans: 0

9) 8 - 9 = Ans: 0

10) 9 - 2 = Ans: 0

11) 6 - 7 = Ans: 0

12) 3 - 6 = Ans: 0

13) 3 - 4 = Ans: 0

14) 3 - 1 = Ans: 0

15) 8 - 1 = Ans: 0

16) 7 - 8 = Ans: 0

17) 8 - 2 = Ans: 0

18) 4 - 5 = Ans: 0

19) 8 - 1 = Ans: 0

20) 3 - 9 = Ans: 0

Generating 20 multiplication problems

1) 2 x 3 = Ans: 0

2) 9 x 7 = Ans: 0

3) 1 x 1 = Ans: 0

4) 7 x 6 = Ans: 0

5) 7 x 6 = Ans: 0

6) 6 x 1 = Ans: 0

7) 3 x 8 = Ans: 0

8) 7 x 3 = Ans: 0

9) 9 x 7 = Ans: 0

10) 1 x 8 = Ans: 0

11) 7 x 8 = Ans: 0

12) 4 x 6 = Ans: 0

13) 9 x 8 = Ans: 0

14) 8 x 5 = Ans: 0

15) 6 x 8 = Ans: 0

16) 4 x 7 = Ans: 0

17) 1 x 1 = Ans: 0

18) 2 x 9 = Ans: 0

19) 9 x 8 = Ans: 0

20) 3 x 6 = Ans: 0