Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Как лучше унаследовать "точка круг цилиндр" |
Автор: PashaLost 6.11.2011, 20:10 |
Возможно эта тема уже тысячу раз обсуждалась, но к сожалению, ответа на неё я не нашёл. Итак. Нужно построить иерархию точка, круг, цилиндр. Дейтел по этому поводу советует воспользоваться public наследованием и всё. Слышал я, что это не очень красиво, ибо точка это никак не круг, а круг это никак не цилиндр. Так каким наследованием унаследовать точку, круг и ?... Или не использовать наследование вовсе ? Тогда как их лучше связать? |
Автор: Lateralus 6.11.2011, 20:19 |
Точка,круг,эллипс-по-моему, лучше так. |
Автор: PashaLost 6.11.2011, 20:42 |
ну хорошо, передо мной стоит конкретная задача, связать эти три объекта в иерархию. Как мне это сделать, если обходиться без наследования ? |
Автор: newbee 6.11.2011, 20:52 | ||
|
Автор: bsa 6.11.2011, 20:55 |
PashaLost, иерархия подразумевает наследование. Если дано такое некорректное задание, то придется давать на него ответ: точка имеет три атрибута: X,Y,Z; и один виртуальный метод: нарисоваться. Круг добавляет атрибут радиус и углы наклона плоскости (в которой он размещен) относительно осей координат; переопределяет метод "нарисоваться". Цилиндр добавляет к кругу атрибут высота и переопределяет метод "нарисоваться". |
Автор: PashaLost 6.11.2011, 21:15 |
А если я создам класс ФИГУРА, с полями X и Y. Создам также классы ТОЧКА и КРУГЛАЯ ФИГУРА, которые будут открыто наследоваться от класса ФИГУРА. Класс Круглая фигура будет содержать в себе радиус. Создам классы КРУГ и ЦИЛИНДР, которые будут открыто наследоваться от класса КРУГЛАЯ ФИГУРА. Цилиндр будет содержать в себе только высоту. ??? |
Автор: mes 6.11.2011, 21:16 |
Цилиндр не круглая фигура.. |
Автор: PashaLost 6.11.2011, 21:18 |
Кстати, newbee, а что означает твой статус БРЕВНО ??? Добавлено через 1 минуту и 6 секунд очень даже круглая, в ней ведь ЕСТЬ радиус и его (цилиндр), как и круг, можно спокойно покатить, значит круглая ![]() |
Автор: mes 6.11.2011, 21:20 | ||
а, позвольте узнать, зачем их связывать ? если потому, что просто надо, то обычным насдледованием.. если хотите, чтоб правильно было, то на данной стадии никак.. Добавлено @ 21:20
тогда и машина круглая, ведь ее колеса круглые и она еще катится.. |
Автор: bsa 6.11.2011, 21:52 | ||
есть понятие "тело вращения". Но оно относится только к трехмерным объектам. Кстати, эллипс - не подходит к твоей круглой фигуре. |
Автор: PashaLost 6.11.2011, 22:09 | ||
я не знаю, кто приплёл этот эллипс, мне он не нужен. А вот кстати что у меня получилось, вроде всё работает ... но правильно ли я всё сделал ...
|
Автор: borisbn 6.11.2011, 22:17 |
PashaLost, IMHO в этой иерархии Round лишний. А задание, действительно, совершенно некорректное |
Автор: de_Nis 6.11.2011, 22:29 |
Может быть, имеет смысл почитать в книге Миронченко Андрей Императивное и ООП программирование на Turbo Pascal и Delphi раздел 16.5 Агрегация классов. Привожу выдержку: "... В следующем примере мы построим 3 класса, описывающие геометрические фигуры в трехмерном пространстве: точка, круг и шар, используя агрегацию..." И далее подробно описано, как и почему созданы классы, как они связаны друг с другом. Не думаю, что понимание кода на Паскале будет затруднительно - важна идея. P.S. По поводу названия книги не уверен, автор указан точно. Книга есть в Сети. |
Автор: newbee 6.11.2011, 22:44 |
Я приплела, ведь окружность - частный случай эллипса. И вот тут было бы корректно использовать наследование эллипс-окружность. Кстати, ТС, вон выше пишут о книге, где советуют использовать агрегацию. Выше я приводила код - как раз оно самое ![]() ЗЫ, А бревно.. Ну потому что бревно. |
Автор: bsa 6.11.2011, 23:20 | ||
Согласен, агрегация лучший вариант (точка, точка+радиус, точка+радиус+точка). такие интересные интимные подробности... нам, программистам, их действительно очень не хватает ![]()
|
Автор: JackYF 8.11.2011, 20:18 | ||
|
Автор: Lols 8.11.2011, 21:59 |
Шар, а не цилиндр. Может, ошибка в задании? С цилиндром мне что-то затруднительно, он ни разу не круглая фигура. |
Автор: PashaLost 13.11.2011, 03:23 |
тему можно закрывать. всем спасибо! |
Автор: bsa 13.11.2011, 10:47 |
Так пометь тему решенной |