Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using namespace std;
- class ClassConst : public Expression {
- private:
- int num;
- ExpressionPtr prev = nullptr;
- ExpressionPtr next = nullptr;
- public:
- ClassConst(int input) {
- num = input;
- }
- int Evaluate() const override {
- return num;
- }
- string ToString() const override {
- return to_string(num);
- }
- };
- class ClassSum : public Expression {
- public:
- ExpressionPtr prev;
- ExpressionPtr next;
- ClassSum(ExpressionPtr first, ExpressionPtr second) {
- prev = first;
- next = second;
- }
- int Evaluate() const override {
- return prev->Evaluate() + next->Evaluate();
- }
- string ToString() const override {
- string result;
- result = prev->ToString() + " + " + next->ToString();
- return result;
- }
- };
- class ClassProduct : public Expression {
- public:
- ExpressionPtr prev;
- ExpressionPtr next;
- ClassProduct(ExpressionPtr first, ExpressionPtr second) {
- prev = first;
- next = second;
- }
- int Evaluate() const override {
- return prev->Evaluate() * next->Evaluate();
- }
- string ToString() const override {
- string result;
- auto tmp = prev.get();
- if (typeid(*tmp) == typeid(ClassSum)) {
- result = '(' + prev->ToString() + ')';
- } else {
- result = prev->ToString();
- }
- result += " * ";
- tmp = next.get();
- if (typeid(*tmp) == typeid(ClassSum)) {
- result += '(' + next->ToString() + ')';
- }
- else {
- result += next->ToString();
- }
- return result;
- }
- };
- ExpressionPtr Const(int num) {
- ExpressionPtr a(new ClassConst(num));
- return a;
- }
- ExpressionPtr Sum(ExpressionPtr first, ExpressionPtr second) {
- ExpressionPtr a(new ClassSum(first, second));
- return a;
- }
- ExpressionPtr Product(ExpressionPtr first, ExpressionPtr second) {
- ExpressionPtr a(new ClassProduct(first, second));
- return a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement