Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Немного философии ООП http://www.cyberforum.ru/cpp-beginners/thread1808784.html
На днях на работе возник холивар с коллегами, к правильному решению пришли только на следующий день, почитав Мейерса и Саттера (один из участников холивара уже знал о правильном решении, но сторонников неправильного было большинство). Рекомендаций от упомянутых гуру пока не говорю, предлагаю поразмышлять) Итак - есть проект, в проекте используется ООП, скатываться до С считается мовитоном и...
C++ OpenCV захват видео с веб-камеры Начал изучать OpenCV. В просторах интернета нашел данный код: #include <cv.h> #include <highgui.h> #include <stdlib.h> #include <stdio.h> int main(int argc, char* argv) { // получаем любую подключённую камеру CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY); //cvCaptureFromCAM( 0 ); http://www.cyberforum.ru/cpp-beginners/thread1808506.html
Как компилятор обрабатывает член класса static constexpr const char* C++
Привет! Наткнулся на непонятный момент class Foo { public: static constexpr const char* PTR = "value"; }; без constexpr не компилируется. Вопрос - как компилятора без линкера разруливает это дело, ведь constexpr value ему нужен на этапе компиляции? Если он это пережевывает, почему тогда constexpr необходим?
C++ Получить график дат санитарных дней в указанном году
задача: Городской рынок имеет санитарный день каждый понедельник месяца . Дано номер года и указано день недели , на который приходится 1 января. Получить график дат санитарных дней в указанном году. Помогите пожалуйста решить задачу
C++ Распознование животных на изображении http://www.cyberforum.ru/cpp-beginners/thread1807414.html
Стала интересна тема распознавания образов на изображениях. Программа должна получать картинку с животным и определить какое это животное(как я понимаю, задача не простая, но все же) . Подскажите в какую сторону копать, какие есть статьи/книги/сайты посвященные этой теме. Слышал про OpenCV, но я уверен, что есть еще что-то похожее.
C++ Как подружить компьютер c МК через USB Здравствуйте, уважаемые форумчане! Никогда не работал с USB нужна помощь. Есть компьютер под управлением Windows 7, плата разработки DE0-Nano-SoC. Необходимо написать программу для ОС, которая могла бы определять плату как USB устройство. В DE0-Nano-SoC есть два USb-интерфейса UART to USB (COM-порт) и USB OTG (FT232R). Думаю подключать через USB OTG. Пишу как в Microsoft Visual Stidio... подробнее

Показать сообщение отдельно
JonyCage
0 / 0 / 0
Регистрация: 18.08.2016
Сообщений: 4

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

17.09.2016, 19:15. Просмотров 395. Ответов 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() ? Заранее благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru