我正在写一个小的“测验计划”。它看起来与此相似:
#include <cstdlib>
#include <iostream>
#include <time.h>
using namespace std;
using std::cout;
class cQuestion
{
private:
static short goodAnswers[20][2];
public:
static void checkAnswer(int questNumber)
{
/* checking input, checking if answer is bad or good */
/* putting the answer to cQuiz::answArr */
};
static void question1(void) { cout << "this is question 1"; };
static void question2(void) { cout << "this is question 2"; };
static void question3(void) { cout << "this is question 3"; };
static void question4(void) { cout << "this is question 4"; };
static void question5(void) { cout << "this is question 5"; };
/*and so on to question 20*/
};
short cQuestion::goodAnswers[20][2] = {0,0};
class cQuiz
{
private:
static short questArr[5];
static short answArr[5];
public:
void drawRandom(void)
{
srand ( time(NULL) );
for (int i = 0; i < 5; i++ )
questArr[i] = rand() % 20 + 1;
};
void askQuestions(void)
{
for (int i = 0; i < 5; i++ )
{
/* call questions by question number from questArr */
/* HOW SHOULD I CALL CERTAIN cQuestion CLASS MEMBER ?? */
cQuestion::checkAnswer(questArr[i]);
}
};
};
short cQuiz::questArr[5] = {0};
short cQuiz::answArr[5] = {0};
int main(int argc, char *argv[])
{
cQuiz quiz;
quiz.drawRandom();
quiz.askQuestions();
system("PAUSE");
return EXIT_SUCCESS;
}
我想知道,我怎么能(或应该)调用类cQuestion成员方法?我正在考虑使用指向这些成员的指针数组(cQuestion :: question1,cQuestion :: question2等)或重载下标运算符[]。
我不确定这两种方式是好还是坏。我应该考虑不同的解决方案或以某种方式一起使用吗?还是我完全忽略了这一点?
答案 0 :(得分:5)
这不是好设计。必须为每个问题添加新方法意味着每次向测验添加问题时都必须重新编译。正如您所知,很难随机调用这些函数。这里需要重新设计。
答案 1 :(得分:2)
继上面的OOP帖子之后,怎么样:
class Question { // Make this a C++ interface
public:
Question(string q, string a)
: QuestionText(q), Answer(a)
{}
string QuestionText;
string Answer;
}
然后使用工厂或仅在初始化函数中实例化这些:
q1 = Question("What is the secret of life", "DNA");
q2 = Question("What is the answer to the great question", "42");
你应该把它们放在一个向量中,而不是放在局部变量或全局变量中。
答案 2 :(得分:1)
除了所有的OOP困境之外,维护一个指向你的成员函数的函数指针数组并随机选择其中一个。
答案 3 :(得分:0)
为什么每个问题都有自己的方法?为什么不创建一个字符串数组来存储问题呢?
答案 4 :(得分:0)
这样的事情怎么样?
string[] questions = {"Q1","Q2","Q3"};
void question(int i)
{
cout << questions[i];
}