C++ 我应该如何随机调用类成员方法?

C++ 我应该如何随机调用类成员方法?,c++,C++,我正在写一个小测验程序。它看起来像这样: #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 ques

我正在写一个小测验程序。它看起来像这样:

#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等的指针数组,或者重载下标运算符[]


我不确定这两种方法是好是坏。我应该考虑不同的解决方案,或者两者兼而有之吗?还是我完全没有抓住要点?

为什么每个问题都有自己的方法?为什么不制作一个字符串数组来存储问题?

这不是一个好的设计。必须为每个问题添加一个新方法意味着每次在测验中添加问题时都必须重新编译。正如您所发现的,很难随机调用这些函数。这里需要重新设计。

像这样的东西怎么样

string[] questions = {"Q1","Q2","Q3"};
void question(int i)
{
    cout << questions[i];
}

关于上面的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");

您可能应该将它们放在向量中,而不是放在局部或全局变量中。

除了所有OOP难题之外,维护一个指向成员函数的函数指针数组,并随机选择其中一个。

Mhm。。我这样做是因为每个问题;成员构建问题,调用其他类中的其他成员方法,将它们放在屏幕文本、伪图形图像等上。这不是一个好的理由。让问题成为一个包含各种补遗的类可能是更好的选择。然后使用不同的组件构建这个类的实例,测验就变成了问题实例的集合。我知道什么是实例、组合和集合,但是。。我能问你一个简单的例子吗?我不知道如何使用不同的组件构建类的实例。如果你的问题都是相同的形式,比如说一些文本、图形和答案,那么类只包含实例,比如说两个字符串和一个图像对象。如果组件数量可变,那么您需要一个指向内容对象的指针向量或类似容器,内容对象需要在类继承权中创建类的实例。非常感谢。问题是生命、宇宙和一切的答案是什么?。就连谷歌也有答案:对于实际问题的答案仍存在分歧。在这种情况下,最快、最有效的方法,谢谢。我不知道:首先,不能使用成员函数指向静态成员函数。为此,必须使用普通函数指针。