0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 10
|
|
1 | |
Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм25.04.2012, 18:12. Показов 11351. Ответов 47
Метки нет (Все метки)
Помогите, пожалуйста, разработать иерархию.
В дальнейшем надо реализовать несколько методов, среди которых изменение размера и вычисление площади. Пока остановился на двух вариантах. 1) Квадрату достаточно одного свойства, длинна стороны. От него наследуется прямоугольник(добавляется свойство ширина) и ромб(добавляется свойство высота к одной из диагоналей). От ромба и прямоугольника наследуется параллелограмм( получаем все необходимые свойства). 2) В обратном порядке от параллелограмма ромб и прямоугольник, от них уже квадрат. Смущает то, что методы увеличения размера и вычисления площади у каждого класса будут свои. Зачем тогда наследование? Если неправ, укажите правильный путь))))
0
|
25.04.2012, 18:12 | |
Ответы с готовыми решениями:
47
Множественное наследование: определить класс Окружность, вписанная в ромб Построение изображения заказанного четырехугольника (параллелограмм, прямоугольник, ромб, квадрат) Определить тип параллелограмма (ромб, прямоугольник или квадрат) Определите что представляет из себя четырехугольник: ромб, прямоугольник, квадрат, трапеция |
25.04.2012, 18:48 | 2 |
второй вариант верный
наследник должен быть частным случаем родителя. всякий ромб и всякий прямоугольник есть параллелограм, но не каждый параллелограм - ромб или прямоугольник. Всякий квадрат это ромб, также всякий квадрат это прямоугольник, но не каждый ромб или прямоугольник есть квадрат
0
|
25.04.2012, 19:18 | 4 |
Пример множественного наследования не всегда легко придумать. В учебных целях часто дают примеры с фигурами.
Добавлено через 2 минуты А если у нас есть функция, находящая, скажем вписанную в ромб окружность. И функция находящая описанную вокруг прямоугольника окружность. Что их, обе дублировать для квадрата?
0
|
Заблокирован
|
|
25.04.2012, 20:05 | 5 |
Квадрату, как это ни удивительно, вообще нет места в этой иерархии, ибо
1) Прямоугольник - ЭТО ПАРАЛЛЕЛОГРАММ, все углы которого равны. 2) Ромб - ЭТО ПАРАЛЛЕЛОГРАММ, все стороны которого равны. Поэтому к квадрату мы можем прийти и от ромба и от прямоугольника. Достаточно, поэтому, снабдить каждый из классов прямоугольника и ромба функцией bool IsSquare (может быть и чистой виртуальной в базовом классе параллелограмм).
0
|
25.04.2012, 20:27 | 8 |
Ты о множественном наследовании слышал? Это как раз тот самый случай. Квадрат это И ромб И прямоугольник. Он обладает свойствами и того и другого.
В квадрат может быть вписана окружность, как в ромб И Квадрат может быть вписан в окружность, как прямоугольник, У квадрата равные стороны как у ромба И У квадрата прямые углы как у прямоугольника. Квадрат можно использовать там где нужен прямоугольник и там где нужен ромб Давайте вообще наследование отменим. Создадим базовый класс параллелограм и Сделаем в нём четыре "ЧистоРеальных" функции isSquare isRomb isRectangle, Можно ещё добавить функций IsTriangle isCircle isPolygon Тогда даже от параллелограма наследовать не надо: все фигуры под рукой :dance3:
0
|
Заблокирован
|
|
25.04.2012, 20:31 | 9 |
Ну тут немножко не так. Если Вы беретесь производить один класс от другого, то это прежде всего предполагает наделение его некими свойствами, которых нет в базовом. Тут же этого напрочь нет.
Ну чертили Вы ромб и неожиданно оказалось, что диагонали этого ромба равны между собой. Это далеко не повод выделять такой объект в отдельный класс. Тут не в программировании дело, а в здравом смысле.
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
25.04.2012, 20:53 | 10 |
Единственное, что приходит в голову - объединить их каким-нибудь интерфейсом с методом вычисления площади.
Никогда так не делайте.
0
|
Заблокирован
|
|
25.04.2012, 21:02 | 13 |
Дело не в наследовании, а в том, что применять его нужно по делу.
Вообще наследование хорошо, когда можно инкапсуулировать некоторые свойства в абстрактных сущностях (например, абстрактный класс ЧЕЛОВЕК). В геометрии же параллелограмм так же реален, как и квадрат и ромб и прямоугольник. Ну немного по другому действовать надо. Мы не получаем каждую. слежующую фигуру естественным образом, как реальное воплощение предыдущей абстракции. Нет ну за уши можно притянуть ООП и сюда, но зачем?
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
||||||
25.04.2012, 21:05 | 14 | |||||
Следуя такому подходу, легче вообще не пользоваться наследованием. Делать как-нибудь так:
0
|
25.04.2012, 21:05 | 15 |
Базовый класс не обязан быть абстрактным. Если ты используешь наследование исключительно от абстрактных классов, ты не полностью понимаешь, зачем оно нужно.
Добавлено через 36 секунд Я об этом тоже писал ему
0
|
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 10
|
|
25.04.2012, 21:15 [ТС] | 16 |
Это, чисто, учебная задачка. Попросили помочь, а в результате, сам прошу помощи.(((
Как иерархию не строй, все равно, методы для каждого класса будут свои. Мне непонятно, в чем тогда смысл наследования... А сделать надо. Скоро сессия)
0
|
Заблокирован
|
|
25.04.2012, 21:18 | 17 |
Нет ну если с геометрией не лады, то тогда можно и так.
А вообще, если солидно подходить к подобной задаче, то разумеется (ну к примеру, выбрав за отправную точку понятие параллелограмм), следует предусмотреть ряд конструкторов, которые позволяют по задаваемым параметрам строить этот параллелограмм. А также предусмотреть ряд предикатных функций, позволяющих делать суждения о том, является ли данный параллелограмм ромбом, прямоугольником и квадратом.
0
|
25.04.2012, 21:21 | 18 |
Чепуха. У ТСа задание: реализовать множественное наследование.
Ему нужен Класс Параллелограм м Ромб - наследник от параллелограмма Прямоугольник - наследник от параллелограмма Квадрат- наследник от ромба и прямоугольника. Например. Параллелограмм строится по двум сторонам и углу между ними Прямоугольник по двум сторонам Ромб по стороне и двум углам, Квадрат по стороне.
0
|
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
|
|
25.04.2012, 21:22 | 19 |
0
|
Заблокирован
|
|
25.04.2012, 21:24 | 20 |
0
|
25.04.2012, 21:24 | |
25.04.2012, 21:24 | |
Помогаю со студенческими работами здесь
20
Объявить систему классов: Точка, Прямоугольник, Квадрат, Ромб, Трапеция, Треугольник, Четырехугольник Записать программу, которая по выбранному названию фигуры (тре- угольник, квадрат, ромб, прямоугольник и т Описать базовый класс: линия, параллелограмм, ромб Уместиться ли целиком прямоугольник в параллелограмм Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |