Website Summary Files Commits Branches @commit @diff @stats
path: root / Polymorphism
diff options
context:
space:
mode:
diff --git a/Polymorphism/MathExpression/Expression.hpp b/Polymorphism/MathExpression/Expression.hpp
index dd344d8..4f09790 100644
--- a/Polymorphism/MathExpression/Expression.hpp
+++ b/Polymorphism/MathExpression/Expression.hpp
@@ -1,3 +1,5 @@
+#pragma once
+
#include <iostream>
class Expression
diff --git a/Polymorphism/MathExpression/Num.hpp b/Polymorphism/MathExpression/Num.hpp
index d2da4ae..91e1492 100644
--- a/Polymorphism/MathExpression/Num.hpp
+++ b/Polymorphism/MathExpression/Num.hpp
@@ -1,3 +1,5 @@
+#pragma once
+
#include "Expression.hpp"
class Num : public Expression
{
@@ -16,6 +18,9 @@ public:
{
return number;
}
-
+ int getNum()
+ {
+ return number;
+ }
}; \ No newline at end of file
diff --git a/Polymorphism/MathExpression/Operation.hpp b/Polymorphism/MathExpression/Operation.hpp
index cfa9534..ade8404 100644
--- a/Polymorphism/MathExpression/Operation.hpp
+++ b/Polymorphism/MathExpression/Operation.hpp
@@ -1,3 +1,5 @@
+#pragma once
+#include "Expression.hpp"
class Operation : public Expression
{
diff --git a/Polymorphism/MathExpression/main.hpp b/Polymorphism/MathExpression/main.hpp
index a309f44..5fa3f8f 100644
--- a/Polymorphism/MathExpression/main.hpp
+++ b/Polymorphism/MathExpression/main.hpp
@@ -1,6 +1,9 @@
#include "Expression.hpp"
+#include "Num.hpp"
+#include "Operation.hpp"
+bool AreTheSame(Expression* left, Expression* right);
int main()
-{
+{
Expression* l = new Num(3);
Expression* r = new Num(7);
Expression* final1 = new Operation(l, '+', r);
@@ -17,4 +20,24 @@ int main()
-} \ No newline at end of file
+}
+bool AreTheSame(Expression* left, Expression* right)
+{
+ if (left->getType() != right->getType())//гледаме дали не са от раличен тип (едното да е опрация,другото да е число)
+ return false; //очевидно са различни тогава
+
+ if (left->getType() == 1) //ако двете са числа
+ {
+ Num* l = (Num*)left; //Конвертираме пойнтерите
+ Num* r = (Num*)right;
+ return l->getNum() == r->getNum(); //сравняваме стойностите
+ }
+ else //Ако двете са операции
+ {
+ Operation* l = (Operation*)left;
+ Operation* r = (Operation*)right;
+ return (l->op == l->op) && AreTheSame(l->left, r->left) && AreTheSame(l->right, r->right);
+ //гледаме дали знаците на опрациите съвпадат, дали левите страни съвпадат и дали десните страни съвпадат.
+ }
+
+}