Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- //абстрактный класс
- class Expression {
- public:
- virtual Expression *diff() = 0;
- virtual void print() = 0;
- };
- //класс число наследуется от класса экспрешн
- class Number : public Expression {
- private:
- int num;
- public:
- Number(int _num) { num = _num; };
- Expression *diff() { Expression *ex = new Number(0); return ex; };
- void print() { std::cout << num; };
- char get() { return num + '0'; };
- };
- //переменная
- class Variable : public Expression {
- private:
- char var;
- public:
- Variable(char _var) { var = _var; };
- Expression *diff() { Expression *ex = new Variable('1'); return ex; };
- void print() { std::cout << var; };
- char get() { return var; };
- };
- class Add : public Expression {
- private:
- char var;
- char var2;
- public:
- Add(char _var, char _var2) { var = _var; var2 = _var2; };
- Add(Number *_var, Number *_var2) { var = _var->get(); var2 = _var2->get(); };
- Add(Variable *_var, Variable *_var2) { var = _var->get(); var2 = _var2->get(); };
- Add(Variable *_var, Number *_var2) { var = _var->get(); var2 = _var2->get(); };
- Add(Number *_var, Variable *_var2) { var = _var->get(); var2 = _var2->get(); };
- Expression *diff() {
- Expression *ex;
- if (var >= '0' && var <= '9') {
- if (var2 >= '0' && var2 <= '9') {
- ex = new Add('0', '0');
- }
- else {
- ex = new Add('0', '1');
- }
- }
- else {
- if (var2 >= '0' && var2 <= '9') {
- ex = new Add('1', '0');
- }
- else {
- ex = new Add('1', '1');
- }
- }
- return ex;
- };
- void print() { std::cout << var << "+" << var2 << std::endl; };
- };
- class Sub : public Expression {
- private:
- char var;
- char var2;
- public:
- Sub(char _var, char _var2) { var = _var; var2 = _var2; };
- Sub(Number *_var, Number *_var2) { var = _var->get(); var2 = _var2->get(); };
- Sub(Variable *_var, Variable *_var2) { var = _var->get(); var2 = _var2->get(); };
- Sub(Variable *_var, Number *_var2) { var = _var->get(); var2 = _var2->get(); };
- Sub(Number *_var, Variable* _var2) { var = _var->get(); var2 = _var2->get(); };
- Expression *diff() {
- Expression *ex;
- if (var >= '0' && var <= '9') {
- if (var2 >= '0' && var2 <= '9') {
- ex = new Sub('0', '0');
- }
- else {
- ex = new Sub('0', '1');
- }
- }
- else {
- if (var2 >= '0' && var2 <= '9') {
- ex = new Sub('1', '0');
- }
- else {
- ex = new Sub('1', '1');
- }
- }
- return ex;
- };
- void print() { std::cout << var << "-" << var2 << std::endl; };
- };
- int main() {
- Expression *ex = new Add(new Variable('x'), new Number(5));
- Expression *de = ex->diff();
- ex->print();
- de->print();
- getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement