我正在尝试制作一个小型计算器应用程序并学习OOPS概念。我看了this talk。 它显示了如何使用多态来避免switch语句。
我的应用中有4个操作员按钮(+
,-
,/
,*
)。我使用2个堆栈作为运算符和操作数
当用户点击任何按钮操作数或操作符时,我尝试为当前表达式创建中缀树并将操作符保持在操作符堆栈中。
当用户点击"计算"我浏览运算符堆栈并根据运算符优先级调整中缀树。
我有抽象Node
类,ValueNode
- > Node
,抽象operatorNode,AddNode - > operatorNode,SubtractNode
- > OperatorNode
等等。
如果上述说明不明确,我的代码的灵感来自以下链接。 http://cplusplus.kurttest.com/notes/stack.html#binary-expression-tree
我的问题是,如何在不使用switch的情况下根据堆栈中的operator char创建正确的子类对象?
因此,给定char(+
或-
或*
或/
)如何在不使用switch的情况下创建AddNode
或SubtractNode
。
答案 0 :(得分:0)
您可以创建从操作员到工厂的地图,以创建正确的实例。这样你:
1.避免开关
2.避免在添加新操作数时更新树创建,只需在地图中注册它们
可以假设地图中没有的东西是操作数(常数或变量)