Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. using namespace std;
  2.  
  3. class ClassConst : public Expression {
  4. private:
  5. int num;
  6. ExpressionPtr prev = nullptr;
  7. ExpressionPtr next = nullptr;
  8.  
  9. public:
  10. ClassConst(int input) {
  11. num = input;
  12. }
  13. int Evaluate() const override {
  14. return num;
  15. }
  16. string ToString() const override {
  17. return to_string(num);
  18. }
  19. };
  20.  
  21. class ClassSum : public Expression {
  22. public:
  23. ExpressionPtr prev;
  24. ExpressionPtr next;
  25. ClassSum(ExpressionPtr first, ExpressionPtr second) {
  26. prev = first;
  27. next = second;
  28. }
  29. int Evaluate() const override {
  30. return prev->Evaluate() + next->Evaluate();
  31. }
  32. string ToString() const override {
  33. string result;
  34. result = prev->ToString() + " + " + next->ToString();
  35. return result;
  36. }
  37. };
  38.  
  39. class ClassProduct : public Expression {
  40. public:
  41. ExpressionPtr prev;
  42. ExpressionPtr next;
  43. ClassProduct(ExpressionPtr first, ExpressionPtr second) {
  44. prev = first;
  45. next = second;
  46. }
  47. int Evaluate() const override {
  48. return prev->Evaluate() * next->Evaluate();
  49. }
  50. string ToString() const override {
  51. string result;
  52. auto tmp = prev.get();
  53. if (typeid(*tmp) == typeid(ClassSum)) {
  54. result = '(' + prev->ToString() + ')';
  55. } else {
  56. result = prev->ToString();
  57. }
  58. result += " * ";
  59. tmp = next.get();
  60. if (typeid(*tmp) == typeid(ClassSum)) {
  61. result += '(' + next->ToString() + ')';
  62. }
  63. else {
  64. result += next->ToString();
  65. }
  66. return result;
  67. }
  68. };
  69.  
  70. ExpressionPtr Const(int num) {
  71. ExpressionPtr a(new ClassConst(num));
  72. return a;
  73. }
  74.  
  75. ExpressionPtr Sum(ExpressionPtr first, ExpressionPtr second) {
  76. ExpressionPtr a(new ClassSum(first, second));
  77. return a;
  78. }
  79. ExpressionPtr Product(ExpressionPtr first, ExpressionPtr second) {
  80. ExpressionPtr a(new ClassProduct(first, second));
  81. return a;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement