diff options
4 files changed, 35 insertions, 3 deletions
| -rw-r--r-- | Polymorphism/MathExpression/Expression.hpp | 2 | ||||
| -rw-r--r-- | Polymorphism/MathExpression/Num.hpp | 7 | ||||
| -rw-r--r-- | Polymorphism/MathExpression/Operation.hpp | 2 | ||||
| -rw-r--r-- | Polymorphism/MathExpression/main.hpp | 27 |
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);
+ //гледаме дали знаците на опрациите съвпадат, дали левите страни съвпадат и дали десните страни съвпадат.
+ }
+
+}
|
