Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2020, 08:00   #1
Wermaht
Новичок
Джуниор
 
Регистрация: 20.10.2020
Сообщений: 7
По умолчанию Подскажите как исправить ошибки в коде

Здравствуйте не могу сам исправить ошибки, надеюсь на вашу поддержку
Код:
#include <iostream>							                                                                          
#include <stdlib.h>						        
#include <cmath>                                                                             
#include <time.h>										
#include <math.h>
#include <stdio.h>

class CShape
{
public:
    virtual ~CShape() {}

    virtual void Move(int dx, int dy) = 0;
    virtual void Resize(double k) = 0;
    virtual void Rotate(double angle) = 0;

    virtual std::ostream& Print(std::ostream& out) = 0;
};

class CCircle   // Круг
    : public CShape
{
public:
    CCircle(int x, int y, int r) 
        : m_x(x)
        , m_y(y)
        , m_r(r)
    {
    }

    virtual void Move(int dx, int dy) override //перемещения на плоскости
    {
        m_x += dx;
        m_y += dy;
    }

    virtual void Resize(double k) override //изменения размеров
    {
        m_r *= k;
    }

    virtual void Rotate(double angle) override //вращения на заданный угол
    {

    }

    virtual std::ostream& Print(std::ostream& out) override
    {
        return out << "circle: " << m_x << ", " << m_y << ", " << m_r;
    }

protected:
    int m_x;
    int m_y;
    int m_r;
};

class CRectangle    // Прямоугольник
    : public CShape
{
public:
    CRectangle(int x1, int y1, int x2, int y2)
        : m_x1(x1)
        , m_y1(y1)
        , m_x2(x2)
        , m_y2(y2)
    {
    }
    virtual void Move(int dx1, int dy1, int dx2, int dy2) override //перемещения на плоскости
    {
        m_x1 += dx1;
        m_y1 += dy1;
        m_x2 += dx2;
        m_y2 += dy2;
    } 
    virtual void Resize(double k) override //изменения размеров
    {
        m_x1 *= k;
        m_y1 *= k;
        m_x2 *= k;
        m_y2 *= k;
    }
    virtual void Rotate(double angle) override //вращения на заданный угол
    {

    }
    virtual std::ostream& Print(std::ostream& out) override
    {
        return out << "Rectangle:" << m_x1 << ", " << m_y1 << ", " << m_x2 << ", " << m_y2;
    }

protected:
    int m_x1;
    int m_y1;
    int m_x2;
    int m_y2;
};

class CSquare   // Квадрат
    : public CRectangle
{
public:
    CSquare(int x, int y, int a)
        : CRectangle(x, y, x + a, y + a)
    {
    }
    virtual void Move(int dx, int dy) override //перемещения на плоскости
    {
        m_x += dx;
        m_y += dy;
    }
    virtual void Resize(double k) override //изменения размеров
    {
        m_x *= k;
        m_y *= k;
        m_a *= k;
    }
    virtual void Rotate(double angle) override //вращения на заданный угол
    {

    }
    virtual std::ostream& Print(std::ostream& out) override
    {
        return out << "Square: " << m_x << ", " << m_y << ", " << m_a;
    }
protected:
    int m_x;
    int m_y;
    int m_a;
};

CShape* GetShape()
{
    for (;;)
    {
        int v = 0;
        std::cout << "*** Меню ***\n"
            "Выберите фигуру:\n"
            "1 - Круг\n"
            "2 - Квадрат\n"
            "3 - Прямоугольник\n"
            "0 - Выход" << std::endl;

        std::cin >> v;

        switch (v)
        {
        case 1:   //Круг
            {

                std::cout << "Введите параметры круга: \n";
                int x, y, r;
                std::cout << " X = "; std::cin >> x; std::cout << " Y = "; std::cin >> y; std::cout << " Radius = "; std::cin >> r;
                return new CCircle (x, y, r);
            }
        break;
        case 2:   //Квадрат                                      
            {
                std::cout << "Вектор от центра до вершины:\n" << std::endl;
                int x, y, a;
                std::cout << "Координаты центра:\n X = "; std::cin >> x;
                std::cout << " Y = "; std::cin >> y;
                std::cout << "Вектор от центра до вершины:\n";
                std::cout << " A = "; std::cin >> a;
                return new CSquare (x, y, a);
            }
        break;
        case 3:   //Прямоугольник                                      
            {
                std::cout << "Введите параметры прямоугольника: \n" << std::endl;
                int x1, y1, x2, y2;
                std::cout << "Координаты центра:" "\nX = "; std::cin >> x1;
                std::cout << " Y = "; std::cin >> y1;
                std::cout << "\nВектор от центра до вершины:\n";
                std::cout << " X = "; std::cin >> x2; std::cout << " Y = "; std::cin >> y2;
                return new CRectangle (x1, y1, x2, y2);
            }
        break;
        case 0:
            return nullptr;
        default:
            std::cout << "Не угадал. Попробуй ещё раз!" << std::endl;
        }
    }
}
int main()
{
    setlocale(LC_ALL, "");
    for (;;)
    {
        system("cls");
        CShape* shape = GetShape();
        shape->Print(std::cout) << std::endl;
        shape -> Resize(1);
        shape->Print(std::cout << "Resize: ") << std::endl;
        shape -> Move(-3, 4);
        shape->Print(std::cout << "Move: ") << std::endl;
        shape ->Rotate(1.234);
        shape->Print(std::cout << "Rotate: ") << std::endl;
        delete shape;
        system("pause");
    }
}
Wermaht вне форума Ответить с цитированием
Старый 20.10.2020, 08:59   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Wermaht Посмотреть сообщение
не могу сам исправить ошибки
Укажите на ошибки.
waleri вне форума Ответить с цитированием
Старый 20.10.2020, 09:18   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

не тестировал. Но компилируется
Код:
#include <iostream>							                                                                          
//#include <cmath>                                                                             
//#include <ctime>										

class CShape
{
public:
    virtual ~CShape() {}

    virtual void Move(int dx1, int dy1, int dx2, int dy2){}
    virtual void Move(int dx, int dy){}
    virtual void Resize(double k) = 0;
    virtual void Rotate(double angle) = 0;

    virtual std::ostream& Print(std::ostream& out) = 0;
};

class CCircle   // Круг
    : public CShape
{
public:
    CCircle(int x, int y, int r) 
        : m_x(x)
        , m_y(y)
        , m_r(r)
    {
    }
    
    void Move(int dx, int dy)override
    {
        m_x += dx;
        m_y += dy;
    }

    void Resize(double k) override //изменения размеров
    {
        m_r *= k;
    }

    void Rotate(double angle) override //вращения на заданный угол
    {
    }

    std::ostream& Print(std::ostream& out) override
    {
        return out << "circle: " << m_x << ", " << m_y << ", " << m_r;
    }

protected:
    int m_x;
    int m_y;
    int m_r;
};

class CRectangle    // Прямоугольник
    : public CShape
{
public:
    CRectangle(int x1, int y1, int x2, int y2)
        : m_x1(x1)
        , m_y1(y1)
        , m_x2(x2)
        , m_y2(y2)
    {
    }

    void Move(int dx1, int dy1, int dx2, int dy2) override //перемещения на плоскости
    {
        m_x1 += dx1;
        m_y1 += dy1;
        m_x2 += dx2;
        m_y2 += dy2;
    } 
    
    void Resize(double k) override //изменения размеров
    {
        m_x1 *= k;
        m_y1 *= k;
        m_x2 *= k;
        m_y2 *= k;
    }
    void Rotate(double angle) override //вращения на заданный угол
    {

    }
    std::ostream& Print(std::ostream& out) override
    {
        return out << "Rectangle:" << m_x1 << ", " << m_y1 << ", " << m_x2 << ", " << m_y2;
    }

protected:
    int m_x1;
    int m_y1;
    int m_x2;
    int m_y2;
};

class CSquare   // Квадрат
    : public CRectangle
{
public:
    CSquare(int x, int y, int a)
        : CRectangle(x, y, x + a, y + a)
    {
    }
    
    void Move(int dx, int dy) override
    {
        m_x += dx;
        m_y += dy;
    }

    void Resize(double k) override //изменения размеров
    {
        m_x *= k;
        m_y *= k;
        m_a *= k;
    }
    void Rotate(double angle) override //вращения на заданный угол
    {

    }
    std::ostream& Print(std::ostream& out) override
    {
        return out << "Square: " << m_x << ", " << m_y << ", " << m_a;
    }
protected:
    int m_x;
    int m_y;
    int m_a;
};

CShape* GetShape()
{
    for (;;)
    {
        int v = 0;
        std::cout << "*** Меню ***\n"
            "Выберите фигуру:\n"
            "1 - Круг\n"
            "2 - Квадрат\n"
            "3 - Прямоугольник\n"
            "0 - Выход" << std::endl;

        std::cin >> v;

        switch (v)
        {
        case 1:   //Круг
            {

                std::cout << "Введите параметры круга: \n";
                int x, y, r;
                std::cout << " X = "; std::cin >> x; std::cout << " Y = "; std::cin >> y; std::cout << " Radius = "; std::cin >> r;
                return new CCircle (x, y, r);
            }
        break;
        case 2:   //Квадрат                                      
            {
                std::cout << "Вектор от центра до вершины:\n" << std::endl;
                int x, y, a;
                std::cout << "Координаты центра:\n X = "; std::cin >> x;
                std::cout << " Y = "; std::cin >> y;
                std::cout << "Вектор от центра до вершины:\n";
                std::cout << " A = "; std::cin >> a;
                return new CSquare (x, y, a);
            }
        break;
        case 3:   //Прямоугольник                                      
            {
                std::cout << "Введите параметры прямоугольника: \n" << std::endl;
                int x1, y1, x2, y2;
                std::cout << "Координаты центра:" "\nX = "; std::cin >> x1;
                std::cout << " Y = "; std::cin >> y1;
                std::cout << "\nВектор от центра до вершины:\n";
                std::cout << " X = "; std::cin >> x2; std::cout << " Y = "; std::cin >> y2;
                return new CRectangle (x1, y1, x2, y2);
            }
        break;
        case 0:
            return nullptr;
        default:
            std::cout << "Не угадал. Попробуй ещё раз!" << std::endl;
        }
    }
}
int main()
{
    setlocale(LC_ALL, "");
    for (;;)
    {
        system("cls");
        CShape* shape = GetShape();
        shape->Print(std::cout) << std::endl;
        shape -> Resize(1);
        shape->Print(std::cout << "Resize: ") << std::endl;
        shape -> Move(-3, 4);
        shape->Print(std::cout << "Move: ") << std::endl;
        shape ->Rotate(1.234);
        shape->Print(std::cout << "Rotate: ") << std::endl;
        delete shape;
        system("pause");
    }
}
Алексей1153 вне форума Ответить с цитированием
Старый 20.10.2020, 09:18   #4
Wermaht
Новичок
Джуниор
 
Регистрация: 20.10.2020
Сообщений: 7
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Укажите на ошибки.
Ошибки с указателями, в классе прямоугольника virtual void Move больше значений чем в virtual void Move(int dx, int dy) = 0;
Код:
virtual void Move(int dx1, int dy1, int dx2, int dy2) override //перемещения на плоскости
    {
        m_x1 += dx1;
        m_y1 += dy1;
        m_x2 += dx2;
        m_y2 += dy2;
    }
Wermaht вне форума Ответить с цитированием
Старый 20.10.2020, 09:20   #5
Wermaht
Новичок
Джуниор
 
Регистрация: 20.10.2020
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
не тестировал. Но компилируется
скомпилировал

Последний раз редактировалось BDA; 21.10.2020 в 01:15.
Wermaht вне форума Ответить с цитированием
Старый 20.10.2020, 09:25   #6
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Wermaht, молодец
Алексей1153 вне форума Ответить с цитированием
Старый 20.10.2020, 09:37   #7
Wermaht
Новичок
Джуниор
 
Регистрация: 20.10.2020
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Wermaht, молодец
осталось заставить работать
Wermaht вне форума Ответить с цитированием
Старый 20.10.2020, 09:44   #8
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Wermaht, а что именно не получается то ? Отладчик имеется ?
Алексей1153 вне форума Ответить с цитированием
Старый 20.10.2020, 09:51   #9
Wermaht
Новичок
Джуниор
 
Регистрация: 20.10.2020
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Wermaht, а что именно не получается то ? Отладчик имеется ?
Вот что пишет мне отладчик
Изображения
Тип файла: jpg Безымянный.jpg (64.3 Кб, 2 просмотров)
Wermaht вне форума Ответить с цитированием
Старый 20.10.2020, 10:04   #10
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Wermaht, это компилятор пишет. До отладчика дело ещё не дошло ))

картинки я компилировать не умею. Ищи, какая чистая виртуальная функция не определена в прямоугольнике. или в предке сделай их с пустым телом все
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Исправить ошибки в коде Evgeny_L Помощь студентам 1 21.02.2019 08:29
С++ Исправить ошибки в коде artilun Общие вопросы C/C++ 3 03.11.2016 10:39
Помогите исправить ошибки в коде lomik222 Общие вопросы C/C++ 5 11.03.2016 09:51
Ошибки в коде. Необходимо исправить. Vladzis Общие вопросы C/C++ 6 06.05.2014 17:28
Подскажите что исправить в коде Grisha248 Помощь студентам 5 25.05.2009 03:00