繁体   English   中英

C ++中不允许使用抽象类型为“ NumericQuestion”的对象

[英]object of abstract type “NumericQuestion” is not allowed in c++

另外,这段代码到底在做什么?

const int MAX_QUESTIONS = 100;
Question* questions[MAX_QUESTIONS];
questions[numQuestions++] = createQuestion("How many degrees are there in a full circle?", 360);

Question* createQuestion(const char question[], const double answer)
{
    NumericQuestion* nq = new NumericQuestion(question, answer);
        return nq;
}

非常感谢。 我真的需要你的帮助才能向我解释

编辑:这是问题的声明

class Question
{
    char *q;
protected:
    void writeQuestion(ostream& ostr) const;
public:
    Question(const char question[])
    {
        int n = strlen(question);
        q =  new char[n];
        strcpy(q, question);
        cout << q;
        }
    void askQuestion() const;
    virtual void getAnswer();
    virtual bool isCorrect() const=0;
};

编辑:声明为NumericQuestion

class NumericQuestion : public Question
{
    double ans, geta;
public:
    NumericQuestion(const char question[], const double answer): Question(question)
    {
        ans = answer;
        getAnswer();
    }

    void getAnswer()
    {
        cout << "Answer: ";
        cin >> geta;
        isCorrect();
        }
    bool isCorrect()
    {
        return ((geta==ans)? true : false);
    }
};

Stackoverflow不允许我发布太多代码

需要声明isCorrect()constNumericQuestion

bool isCorrect() const  // <--- add const keyword here

原因是因为const是方法签名的一部分,例如其名称和参数。 isCorrect() const比命名的功能的不同方法isCorrect()不是常量。

当您看到带有=0的虚拟方法时,表示该方法是“纯虚拟”的。 基类通常不指定实现,但是在实例化任何派生类之前,必须定义实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM