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

Класс прямоугольник (Visual C++) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.93
Ann_ushka
-24 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 23
14.03.2012, 14:29     Класс прямоугольник (Visual C++) #1
Необходимо создать класс прямоугольник и производный класс пятиугольник.Необходимо перемещать фигуры на плоскости(параллельный перенос) и проверить факт пересечения этих фигур.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
14.03.2012, 15:18     Класс прямоугольник (Visual C++) #2
Чего-чего ?????

Твой преп с дуба рухнул? Наследование предполагает, что объект производного класса (субкласса) является одновременно объектом родительского класса (суперкласса), т.е. может применяться в любом контексте, где требуется объект родительского класса (т.н. LSP). Однако утверждать, что пятиугольник является прямоугольником - я бы не решился..... Меня учили какой-то другой математике? Или препа пора отправить в 5-й класс средней школы учить геометрию?

Короче, задача явно некорректно поставлена. (Ну или некорректно изложена.)
Ann_ushka
-24 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 23
14.03.2012, 16:21  [ТС]     Класс прямоугольник (Visual C++) #3
основновное условие,чтобы был реализован принцип наследования....
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
14.03.2012, 16:25     Класс прямоугольник (Visual C++) #4
Тогда создавай базовый класс "геометрическая фигура" и от него наследуй уже классы "прямоугольник", "пятиугольник" и чего еще душа пожелает......
co6ak
Кошковед
 Аватар для co6ak
403 / 496 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
14.03.2012, 16:25     Класс прямоугольник (Visual C++) #5
дык бред получается.
либо припод так пошутил, либо тупо поимелпоймал всех на незнании

можно от точки наследовать прямоугольник допустим. или круг.
т.е. в классе потомка ( прямоугольника ) точка будет началом отсчета, допустим, нижнего левого угла, или же центром окружности.

но вот из прямоугольника получить пятиугольник это что-то на грани фантастики.
типо:
отступ 1) взять прямоугольник
отступ 2) шмякнуть молотком по одному ребру прямоугольника, что б оно погнулось
отступ 3) посчитать количество углов
отступ 4) ???
отступ 5) profit!
Ann_ushka
-24 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 23
14.03.2012, 16:26  [ТС]     Класс прямоугольник (Visual C++) #6
основновное условие,чтобы был реализован принцип наследования.... " один класс потомок другого"..
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.03.2012, 16:37     Класс прямоугольник (Visual C++) #7
Ann_ushka за базовый класс возьмите класс Геометрическая фигура
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
14.03.2012, 16:40     Класс прямоугольник (Visual C++) #8
Цитата Сообщение от co6ak Посмотреть сообщение
можно от точки наследовать прямоугольник допустим. или круг.
т.е. в классе потомка ( прямоугольника ) точка будет началом отсчета, допустим, нижнего левого угла, или же центром окружности.
Не-не-не! Ни коем случае!!!
Принцип подстановки Лисков (LSP) требует, чтобы объект производного класса являлся и объектом родительского класса, тогда он может использоваться во всех контекстах, где требуется объект родительского класса. Является ли прямоугольник точкой? Или круг? Никогда.

Другое дело, что класс "геометрическая фигура" может включать в себя (агрегировать) объект класса "точка" - например, точку начала отсчета координат. Но это - совершенно другое отношение! Не наследование, а агрегирование!
Ann_ushka
-24 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 23
15.03.2012, 18:32  [ТС]     Класс прямоугольник (Visual C++) #9
ТАК ВЫГЛЯДИТ ЗАДАНИЕ!!!!!

Написать программу, демонстрирующую работу с объектами двух типов: Т1 и Т2,
для чего создать систему соответствующих классов. Каждый объект должен иметь
идентификатор (в виде произвольной строки символов) и одно или несколько полей
для хранения состояния объекта (один класс является потомком другого).
Клиенту (функции main) должны быть доступны следующие основные операции
(методы): создать объект, удалить объект, показать значение объекта и прочие
дополнительные операции (зависят от варианта). Операции по созданию и удалению
объектов инкапсулировать в классе Factory., Предусмотреть меню, позволяющее
продемонстрировать заданные операции.
При необходимости в разрабатываемые классы добавляются дополнительные
методы (например, конструктор копирования, операция присваивания и т. п.)
для обеспечения надлежащего функционирования этих классов.
обьек Т1:Rectangle . Т2:Pentagon!!! Методы:IsIntersect(T&. T&)(Определить
факт пересечения объектов obi и оЬ2
(есть пересечение или нет)),Move()(Переместить объект на плоскости)
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
15.03.2012, 18:36     Класс прямоугольник (Visual C++) #10
Цитата Сообщение от CheshireCat Посмотреть сообщение
Является ли прямоугольник точкой? Или круг? Никогда.
Боюсь я с вами не согласен. Круг "is a" точка, как бы странно это не звучало. Т.к. имеет возможности класса точка.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.03.2012, 19:41     Класс прямоугольник (Visual C++) #11
Цитата Сообщение от dimcoder Посмотреть сообщение
Круг "is a" точка, как бы странно это не звучало. Т.к. имеет возможности класса точка.
Ага. А осциллограф имеет "возможности" телевизора. Осциллограф = телевизор? Нет, скорее оба они - устройства отображения. Иерархия проглядывается автоматически - абстрактный класс "Устройство отображения", производные "Осциллограф", "Телевизор", "Кинопроектор" и что душе угодно. А по вашей логике можно как круг от точки унаследовать, так и наоборот ().
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
15.03.2012, 20:24     Класс прямоугольник (Visual C++) #12
Цитата Сообщение от silent_1991 Посмотреть сообщение
А по вашей логике можно как круг от точки унаследовать, так и наоборот
Нельзя. Я этого не говорил.
Допустим есть класс Точка. У этого класса будут элементы x, y - координаты + методы кое-какие. Теперь можно создать класс Круг унаследовавшись от класса Точка. x, y - центр окружности. Методы из класса Точка остаются вполне уместными в классе Круг.
Поэтому
Цитата Сообщение от dimcoder Посмотреть сообщение
Боюсь я с вами не согласен. Круг "is a" точка, как бы странно это не звучало. Т.к. имеет возможности класса точка.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
15.03.2012, 20:29     Класс прямоугольник (Visual C++) #13
dimcoder самое глупейшее что можно придумать, это наследовать круг от точки, точка что геометрическая фигура? что общего круга и точки? периметр, площадь? круг если наследовать, то от класса Shape
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.03.2012, 20:46     Класс прямоугольник (Visual C++) #14
dimcoder, я вам могу привести тучу примеров, в которых у двух совершенно не родственных классов прослеживаются одинаковые методы. А вы мне скажете, можно их наследовать один от другого или нет.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
16.03.2012, 10:41     Класс прямоугольник (Visual C++) #15
Цитата Сообщение от panicwassano Посмотреть сообщение
самое глупейшее что можно придумать, это наследовать круг от точки
Цитата Сообщение от panicwassano Посмотреть сообщение
что общего круга и точки
Цитата Сообщение от silent_1991 Посмотреть сообщение
не родственных классов //???
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
class Point
{
    public:
        
    Point(int _x = 0, int _y = 0): x(_x), y(_y) {}
    
    void setX(int _x) {x = _x;}
    void setY(int _y) {y = _y;}
    
    int getX() {return x;}
    int getY() {return y;}
    
    void print() 
    {
        cout << "Point[" << x << ", " << y << "]" << endl;
    }
    
    private:
    int x;
    int y;
};
 
class Circle: public Point
{
    public:
    
    Circle(int x = 0, int y = 0, int _r = 10) : Point(x, y)
    {
        setRadius(_r);
    }
    
    void setRadius(int _r)
    {
        r = _r > 0? _r : 10;
    }
    
    int getRadius() {return r;}
    int getDiameter() {return r*2;}
    
    void print()
    {
        cout << "Circle[" << getX() << ", " << getY() << "] Radius = " << getRadius() << endl;
    }
    
    private:
    
    int r;
};
 
int main(int argc, char *argv[])
{
    Point p(5, 10);
    p.print();
    Circle c(8, 26, 5);
    c.print();
    system("PAUSE > NULL");
    return EXIT_SUCCESS;
}
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
16.03.2012, 11:51     Класс прямоугольник (Visual C++) #16
dimcoder, к сожалению, приведенный код - ошибка проектирования.

Рекомендую прочесть:
Гради Буч Объектно-ориентированный анализ и проектирование с примерами приложений на С++, 2-е издание, Rational Санта-Клара, Калифорния, перевод с английского под редакцией И. Романовского и Ф. Андреева. Существует в электронном виде, гугл в помощь.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
16.03.2012, 12:07     Класс прямоугольник (Visual C++) #17
CheshireCat, Harvey Deitel, Paul Deitel тоже ошиблись написав главу 9 (подглава 5) в 4 издании, приведя в пример именно иерархию Point-Circle?
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
16.03.2012, 12:15     Класс прямоугольник (Visual C++) #18
Да. Без всякого сомнения.

PS: для примера, попробуй в рамках все той же иерархии "Point-Circle" спроектировать более сложные фигуры - пятиугольник и куб.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
16.03.2012, 12:38     Класс прямоугольник (Visual C++) #19
Цитата Сообщение от CheshireCat Посмотреть сообщение
пятиугольник и куб
Я однако не говорил ни о кубах, ни о пятиугольниках. Я и сам задавался таким же вопросом (точка-квадрат). Но был приведен конкретный случай: Point-Circle, наследование здесь вполне уместно, но только здесь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2012, 12:41     Класс прямоугольник (Visual C++)
Еще ссылки по теме:

C++ Класс прямоугольник исправить код
C++ Класс Rectangle (прямоугольник)
Класс Прямоугольник C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.03.2012, 12:41     Класс прямоугольник (Visual C++) #20
dimcoder, мой преподаватель наследовал собаку от кошки. Потому что обе они могли ходить и кушать.

Цитата Сообщение от dimcoder Посмотреть сообщение
наследование здесь вполне уместно
Нет.
Yandex
Объявления
16.03.2012, 12:41     Класс прямоугольник (Visual C++)
Ответ Создать тему
Опции темы

Текущее время: 16:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru