我有以下可用于计算算术表达式的 C++ 代码。
struct Node
{
char _operator;
int _value;
Node* _previous;
Node* _next;
double calculate()
{
switch(_operator)
{
case '#': return _value;
case '*': return _previous->calculate() * _next->calculate();
case '+': return _previous->calculate() + _next->calculate();
case '-': return _previous->calculate() - _next->calculate();
}
return -1;
}
}
我是 C++ 的新手,我明白对于一般的 OOP,使用继承比使用条件结构更好,尤其是当它们嵌套很深时。
我想知道如何使用继承来转换开关,尽管对于这个例子来说它不可行(会吗?)
我是否声明了 calculate
函数 abstract
并为 switch
的四个 case
中的每一个编写了一个子类>?
最佳答案
品味问题。您认为“加节点”与“减节点”是不同类型的对象吗?需要考虑的一件事是您无法修改对象的类,因此通过将它们设为单独的类,您将失去将“加节点”更改为不同类型节点的能力。
在这种情况下,添加四个类来摆脱单个 switch 语句似乎会使事情过于复杂。
关于c++ - 使用继承规避 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29777885/