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

Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.95
AndrK189100
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 10
25.04.2012, 18:12     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #1
Помогите, пожалуйста, разработать иерархию.
В дальнейшем надо реализовать несколько методов, среди которых изменение размера и вычисление площади.
Пока остановился на двух вариантах.
1)
Квадрату достаточно одного свойства, длинна стороны. От него наследуется прямоугольник(добавляется свойство ширина) и ромб(добавляется свойство высота к одной из диагоналей).
От ромба и прямоугольника наследуется параллелограмм( получаем все необходимые свойства).

2)
В обратном порядке от параллелограмма ромб и прямоугольник, от них уже квадрат.

Смущает то, что методы увеличения размера и вычисления площади у каждого класса будут свои. Зачем тогда наследование?

Если неправ, укажите правильный путь))))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2012, 18:12     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм
Посмотрите здесь:

C++ Множественное наследование
Множественное наследование C++
Множественное наследование C++
Множественное наследование C++
Множественное наследование C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
26.04.2012, 00:00     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #41
Цитата Сообщение от gray_fox Посмотреть сообщение
Скомпилируется, конечно, но... не кажется, что что-то здесь не так?)
Не знаю, ща попробую в студии проектик создать с ним. Там ошибки? Вроде только всяких мелочей не хватает вроде точек с запятой. Ща, узнаю, что не так.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
26.04.2012, 00:05     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #42
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Не знаю, ща попробую в студии проектик создать с ним. Там ошибки? Вроде только всяких мелочей не хватает вроде точек с запятой. Ща, узнаю, что не так.
Вообще должно. И выполниться корректно должно. Я не это имел ввиду. Просто вы не считаете, что такой дизайн немного кривоват?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
26.04.2012, 00:06     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #43
Цитата Сообщение от thick_int Посмотреть сообщение
И еще класс Parallelogram можнор дополнить вот такими функциями
Круто, а когда ты создашь какую-нибудь функцию для работы с ромбами
вроде хитрого определения пересечения сторон с вписанной окружностью второго ромба
bool IsThere_Intersection_Of_InnerCircleOfRomb1_With_Diagonal_Of_Romb2(Romboid* item1, Romboid* item2);

То не сможешь передавать ей квадраты. И придётся копипастить ещё 2 функции
bool IsThere_Intersection_Of_InnerCircleOfSquare1_With_Diagonal_Of_Romb2(Square* item1, Romboid* item2);
bool IsThere_Intersection_Of_InnerCircleOfSquare1_With_Diagonal_Of_Square2(Square* item1, Square* item2);
thick_int
Заблокирован
26.04.2012, 00:09     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #44
Пока ничего не понял. Просто по русски скажите, в чем могут быть проблемы.
Просто скажите, какая задача вызовет трудности?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
26.04.2012, 00:18     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #45
Ты создал функцию, которая принимает указатель на 2 ромба и делает с ним какое-то действие, свойственное только ромбам.
Например находит точку пересечения их вписанных окружностей.
Для прямоугольника это бессмысленно, а для ромба можно.

Теперь у тебя есть два квадрата. Они унаследовали такое св-во ромба, как вписанная окр-ть
Будешь ли ты писать две новых функции для выполнения этого алгоритма между квадратами
и между ромб и квадратом?????

Или воспользуешься наследованием???
thick_int
Заблокирован
26.04.2012, 00:29     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #46
Вот в данном случае тот подход, который я, да и Вы тоже кстати реализовывали пока, только, на мой взгляд не очень корректно, не позволяет решить эти задачи.
Мы в данном случае на самом деле пытались построить класс конгруэнтных параллелограммов, то есть равных между собой с точностью до параллельного переноса, вращения, симметрии и любой их комбинации.

Вы же в данном случае перескакиваете с синтетики на аналитику. Если так охота, то пожалуйста. И вот здесь (но надо тоже все оценить) наверно можно из этого абстрактного класса конгруэнтных параллелограммов наследовать КОНКРЕТНЫЕ ПАРАЛЛЕЛОГРАММЫ, то есть прибивать их к плоскости и вот тогда можно приступать к анализу Вашей новой задачи.

А так вот с бухты-барахты я Вам на Ваш вопрос не отвечу.

P.S. Открою Вам страшную тайну. Если в выпуклый многоугольник можно вписать окружность, то радиус оной равен отношению площади данного многоугольника к его полупериметру.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.04.2012, 12:12     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #47
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А если у нас есть функция, находящая, скажем вписанную в ромб окружность. И функция находящая описанную вокруг прямоугольника окружность.
Что их, обе дублировать для квадрата?
Плохо знаю геометрию, но тут можно просто перегрузить эти функции для разных фигур.
Ромб не является параллелограммом с точки зрения ООП, т.к. параллелограмм характеризуется 2 сторонами и углом между ними, а ромб - 2 диагоналями, поэтому наследование тут неуместно. И вообще, играться с наследованием и динамическим полиморфизмом стоит как можно реже, вместо них лучше использовать агрегацию и compile-time полиморфизм(шаблоны).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2012, 14:02     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм
Еще ссылки по теме:

C++ Множественное наследование
C++ Множественное наследование
Множественное наследование C++

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
26.04.2012, 14:02     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #48
Да, вероятно от ТС так же ждут ещё и использования виртуального наследования.
Yandex
Объявления
26.04.2012, 14:02     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм
Ответ Создать тему
Опции темы

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