获取正确的子类实例无开关情况



我正在尝试制作一个小型计算器应用程序,并学习OOPS概念。我看了这个演讲。它展示了如何使用多态性来避免切换语句。

我的应用程序中有4个操作员按钮(+-/*)。我使用2个堆栈作为运算符和操作数当用户点击任何按钮操作数或运算符时,我会尝试为当前表达式创建一个中缀树,并将运算符保留在运算符堆栈中。当用户点击"计算"时,我会遍历运算符堆栈,并根据运算符优先级调整中缀树。

我有抽象的Node类、ValueNode->Node、抽象运算符Node、AddNode->operatorNode、SubtractNode->OperatorNode等等

我的代码灵感来自以下链接,以防上面的描述不清楚。http://cplusplus.kurttest.com/notes/stack.html#binary-表达式树

我的问题是,在不使用switch的情况下,如何根据堆栈中的运算符char创建正确的子类对象?

那么,给定字符(+-*/),我如何在不使用开关的情况下创建AddNodeSubtractNode

您可以创建一个从操作员到工厂的映射,以创建正确的实例。这样你:
1.避免切换
2.添加新操作数时,避免必须更新树创建,只需将它们注册到映射中即可

映射中没有的内容可以假设为操作数(常量或变量)

最新更新