#ifndef QUESTION_H #define QUESTION_H #include #include // Question is an abstract class because it has a least one pure virtual method class Question { protected: std::string text; std::string answer; public: Question(); virtual ~Question() { } virtual std::istream& read(std::istream& in, bool discardEmptyLine = true); friend inline std::istream& operator>>(std::istream& in, Question& question) { //return question.vtable[1](in); return question.read(in); } virtual std::ostream& ask(std::ostream& out) const; friend inline std::ostream& operator<<(std::ostream& out, const Question& question) { return question.ask(out); } virtual bool isRightAnswer(const std::string& playerAnswer) const = 0; // pure virtual method int getScore() const { return 10; } }; #endif // QUESTION_H