Advertisement
Guest User

Untitled

a guest
Dec 26th, 2014
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.65 KB | None | 0 0
  1.  
  2.  
  3. #include <iostream>
  4. //абстрактный класс
  5. class Expression {
  6. public:
  7.     virtual Expression *diff() = 0;
  8.     virtual void print() = 0;
  9. };
  10. //класс число наследуется от класса экспрешн
  11. class Number : public Expression {
  12. private:
  13.     int num;
  14. public:
  15.     Number(int _num) { num = _num; };
  16.     Expression *diff() { Expression *ex = new Number(0); return ex; };
  17.     void print() { std::cout << num; };
  18.     char get() { return num + '0'; };
  19. };
  20. //переменная
  21. class Variable : public Expression {
  22. private:
  23.     char var;
  24. public:
  25.     Variable(char _var) { var = _var; };
  26.     Expression *diff() { Expression *ex = new Variable('1'); return ex; };
  27.     void print() { std::cout << var; };
  28.     char get() { return var; };
  29. };
  30.  
  31. class Add : public Expression {
  32. private:
  33.     char var;
  34.     char var2;
  35. public:
  36.     Add(char _var, char _var2) { var = _var; var2 = _var2; };
  37.     Add(Number *_var, Number *_var2) { var = _var->get(); var2 = _var2->get(); };
  38.     Add(Variable *_var, Variable *_var2) { var = _var->get(); var2 = _var2->get(); };
  39.     Add(Variable *_var, Number *_var2) { var = _var->get(); var2 = _var2->get(); };
  40.     Add(Number *_var, Variable *_var2) { var = _var->get(); var2 = _var2->get(); };
  41.     Expression *diff() {
  42.         Expression *ex;
  43.         if (var >= '0' && var <= '9') {
  44.             if (var2 >= '0' && var2 <= '9') {
  45.                 ex = new Add('0', '0');
  46.             }
  47.             else {
  48.                 ex = new Add('0', '1');
  49.             }
  50.         }
  51.         else {
  52.             if (var2 >= '0' && var2 <= '9') {
  53.                 ex = new Add('1', '0');
  54.             }
  55.             else {
  56.                 ex = new Add('1', '1');
  57.             }
  58.         }
  59.         return ex;
  60.     };
  61.     void print() { std::cout << var << "+" << var2 << std::endl; };
  62. };
  63.  
  64. class Sub : public Expression {
  65. private:
  66.     char var;
  67.     char var2;
  68. public:
  69.     Sub(char _var, char _var2) { var = _var; var2 = _var2; };
  70.     Sub(Number *_var, Number *_var2) { var = _var->get(); var2 = _var2->get(); };
  71.     Sub(Variable *_var, Variable *_var2) { var = _var->get(); var2 = _var2->get(); };
  72.     Sub(Variable *_var, Number *_var2) { var = _var->get(); var2 = _var2->get(); };
  73.     Sub(Number *_var, Variable* _var2) { var = _var->get(); var2 = _var2->get(); };
  74.     Expression *diff() {
  75.         Expression *ex;
  76.         if (var >= '0' && var <= '9') {
  77.             if (var2 >= '0' && var2 <= '9') {
  78.                 ex = new Sub('0', '0');
  79.             }
  80.             else {
  81.                 ex = new Sub('0', '1');
  82.             }
  83.         }
  84.         else {
  85.             if (var2 >= '0' && var2 <= '9') {
  86.                 ex = new Sub('1', '0');
  87.             }
  88.             else {
  89.                 ex = new Sub('1', '1');
  90.             }
  91.         }
  92.         return ex;
  93.     };
  94.     void print() { std::cout << var << "-" << var2 << std::endl; };
  95. };
  96.  
  97. int main() {
  98.     Expression *ex = new Add(new Variable('x'), new Number(5));
  99.     Expression *de = ex->diff();
  100.     ex->print();
  101.     de->print();
  102.     getchar();
  103.     return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement