我正在尝试制作一个小型计算器应用程序,并学习OOPS概念。我看了这个演讲。它展示了如何使用多态性来避免切换语句。
我的应用程序中有4个操作员按钮(+
、-
、/
、*
)。我使用2个堆栈作为运算符和操作数当用户点击任何按钮操作数或运算符时,我会尝试为当前表达式创建一个中缀树,并将运算符保留在运算符堆栈中。当用户点击"计算"时,我会遍历运算符堆栈,并根据运算符优先级调整中缀树。
我有抽象的Node
类、ValueNode
->Node
、抽象运算符Node、AddNode->operatorNode、SubtractNode
->OperatorNode
等等
我的代码灵感来自以下链接,以防上面的描述不清楚。http://cplusplus.kurttest.com/notes/stack.html#binary-表达式树
我的问题是,在不使用switch的情况下,如何根据堆栈中的运算符char创建正确的子类对象?
那么,给定字符(+
或-
或*
或/
),我如何在不使用开关的情况下创建AddNode
或SubtractNode
。
您可以创建一个从操作员到工厂的映射,以创建正确的实例。这样你:
1.避免切换
2.添加新操作数时,避免必须更新树创建,只需将它们注册到映射中即可
映射中没有的内容可以假设为操作数(常量或变量)