Форум программистов, компьютерный форум, киберфорум
Наши страницы

Скопировать объект, на который ссылается указатель на абстрактный класс - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Получить наибольшее число k, для которого 2^k<n http://www.cyberforum.ru/cpp-beginners/thread1809083.html
Вводится натуральное число n. Получить наибольшее число k, для которого 2^k<n . Не могу сообразить как сделать. Через логарифм может быть. Будьте добры подсказать пожалуйста.
C++ Ошибка компиляции простой программы Написана программа на Borland 6 C++ в консольном режиме ( Console Wizard ) , но проверить ее работоспобность на самой программе ну никак не получается( сама программа выдает ошибку, скачивал с... http://www.cyberforum.ru/cpp-beginners/thread1809074.html
Как ввести в программу функцию из стороннего файла? C++
Друзья, будьте добры, подскажите решение. Как ввести в программу функцию из стороннего файла. Попутно я нашел кое какую информацию, от моего преподавателя, что для работы с фку из сторонних файлов,...
C++ Специальная работа для работы с текстом (для нужд БНФ)
Здравствуйте, форумчане. Необходимо код на CSS прогнать через метатранслятор БНФ и получить на выходе терминалы, нетерминалы, служебные слова. Так как работать надо с обычным текстом, то может быть...
C++ Найти минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы http://www.cyberforum.ru/cpp-beginners/thread1809015.html
Необходимо найти минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы. Ищет не все суммы диагоналей. Помогите пожалуйста найти ошибки. #include <iostream> ...
C++ Динамический ввод и вывод данных в двумерный массив Не могу реализовать ввод и вывод данных двумерного массива используя указатель на указатель, в чём проблема? cin >> *(*(p+n*i)+j); #include <iostream> using namespace std; int main() {... подробнее

Показать сообщение отдельно
JonyCage
0 / 0 / 0
Регистрация: 18.08.2016
Сообщений: 6
Завершенные тесты: 1

Скопировать объект, на который ссылается указатель на абстрактный класс - C++

17.09.2016, 19:15. Просмотров 458. Ответов 7
Метки (Все метки)

Доброго времени суток. У меня такое задание: написать программу символьного дифференцирования, т.е. пользователь пишет функцию f(x), а программа выводит ее производную как f'(x). Так вот есть базовый абстрактный класс, который дан в условии задачи
C++
1
2
3
4
5
6
7
class Expression
{
public:
    
    virtual Expression *diff()=0; //функция дифференцирования
    virtual void print()=0;          //функция вывода выражения
};
а проблема сейчас стоит в том, как вычислять производную произведения.
В условии выражение задается так:
C++
1
Expression *e=new Add(new Variable('x'), new Number(4));//Add это класс-сумма
Add, Variable, Number унаследованы от Expression, и я так понимаю, что в конструктор Add передаются указатели на базовый класс(что в общем-то логично) значит и в класс Mul(произведение) тоже должны передаваться указатели на базовый класс.
Я думал реализовать его примерно так,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class Mul: public Expression
{
private:
    Expression *ex1, *ex2   //выражения-множители
        , *ex3, *ex4        //не продиффмринцированные множители    
    ;
    bool prodif;
public:
    Mul(){}
    Mul(Expression *expr1, Expression *expr2):ex1(expr1), ex2(expr2), prodif(false){}
 
    Expression *diff()
    {
        //в ex3 как-то cкопировать значение ex1
        ex1->diff();//потом продифференцировать ex1
 
        //в ex4 как-то cкопировать значение ex2
        ex2->diff();//потом продифференцировать ex2
        prodif=true;
        return this;
    }
 
    void print()
    {
        if(!prodif)
        {
            ex1->print();
            std::cout<<'*';
            ex2->print();
        }else
        {
            std::cout<<'(';
            
            ex1->print();   //производная первого
            std::cout<<'*';
            ex4->print();   //второе без изменения
 
            std::cout<<'+';
 
            ex3->print();   //первое без изменения
            std::cout<<'*';
            ex2->print();   //производная второго
 
            std::cout<<')';
 
        }
    }
 
};
но как все таки "в ex3 как-то cкопировать значение ex1" ведь нет смысла в "ex3=ex1", а через new нельзя так как это указатели на абстрактный класс, ну или как по другому реализовать метод diff() ? Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.