我正在写一些东西来说明命令模式。我已经认识到,对于这个计算器实现,所有二进制运算(加法,减法等)只是简单地执行'对前两个堆栈项的操作,所以我试图将该逻辑拉入另一个基类(BinaryCommand)。
我很困惑为什么我会收到错误(显示为对下面主要功能的评论)。非常感谢任何帮助!
class ExpressionCommand
{
public:
ExpressionCommand(void);
~ExpressionCommand(void);
virtual bool Execute (Stack<int> & stack) = 0;
};
class BinaryCommand : ExpressionCommand
{
public:
BinaryCommand(void);
~BinaryCommand(void);
virtual int Evaluate (int n1, int n2) const = 0;
bool Execute (Stack<int> & stack);
};
bool BinaryCommand::Execute (Stack <int> & s)
{
int n1 = s.pop();
int n2 = s.pop();
int result = this->Evaluate (n1, n2);
s.push (result);
return true;
}
class AdditionCommand : public BinaryCommand
{
public:
AdditionCommand(void);
~AdditionCommand(void);
int Evaluate (int n1, int n2);
};
int AdditionCommand::Evaluate (int n1, int n2)
{
return n1 + n2;
}
int main()
{
AdditionCommand * command = new AdditionCommand(); // 'AdditionCommand' : cannot instantiate abstract class
}
答案 0 :(得分:0)
Eek,对不起,伙计们,将'const'添加到派生类修复它。
答案 1 :(得分:0)
BinaryCommand
是抽象的,因为virtual int Evaluate (int n1, int n2) const = 0;
被声明为纯粹。
AdditionCommand
不会覆盖virtual int Evaluate (int n1, int n2) const = 0;
,因此该类缺少纯虚拟成员的定义,因此是抽象的。
int AdditionCommand::Evaluate (int n1, int n2);
不会覆盖virtual int Evaluate (int n1, int n2) const = 0;
,但会隐藏它。