c++ - 使用继承规避 switch 语句

标签 c++ inheritance polymorphism

我有以下可用于计算算术表达式的 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/

相关文章:

javascript - ES6 继承 : uses `super` to access the properties of the parent class

python - 如何在继承类中执行常见的后初始化任务?

python - 下面的代码在Python3中实现了多态性,这样说是否正确?

c++ - C++ 中的切片和运算符重载

c++ - C++ 中符合标准的最小对象大小?

c++ - 关于Eigen::MatrixXd列式计算的问题

c++ - 将 boost::asio 中的异步文件 io 扩展到 Mac OS X

c++ - 使用 wxWidgets 发布到 URL

c++ - 我想在将参数放入构造函数之前检查参数

c++ - 在只有参数化构造函数的类中初始化的 vptr(虚拟指针)在哪里?