Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.55/31: Рейтинг темы: голосов - 31, средняя оценка - 4.55
AndrK189100
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 10
1

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

25.04.2012, 18:12. Просмотров 5644. Ответов 47
Метки нет (Все метки)

Помогите, пожалуйста, разработать иерархию.
В дальнейшем надо реализовать несколько методов, среди которых изменение размера и вычисление площади.
Пока остановился на двух вариантах.
1)
Квадрату достаточно одного свойства, длинна стороны. От него наследуется прямоугольник(добавляется свойство ширина) и ромб(добавляется свойство высота к одной из диагоналей).
От ромба и прямоугольника наследуется параллелограмм( получаем все необходимые свойства).

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

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

Если неправ, укажите правильный путь))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2012, 18:12
Ответы с готовыми решениями:

Множественное наследование
В спортивных соревнованиях различных видов спорта приняли участие люди из...

Множественное наследование
Друзья прошу помочь разобраться, как получить доступ из массива J, к методу...

Множественное наследование
Листинг: #include <iostream> using namespace std; class Person{private:...

Множественное наследование
Есть два класса Human(fname, lname) и класс Employee c чисто виртуальными функц...

Множественное наследование
Возник вопрос по теме множественное наследование. Вот скажем у нас определены...

47
Kuzia domovenok
2357 / 2091 / 494
Регистрация: 25.03.2012
Сообщений: 7,487
Записей в блоге: 1
26.04.2012, 00:00 41
Цитата Сообщение от gray_fox Посмотреть сообщение
Скомпилируется, конечно, но... не кажется, что что-то здесь не так?)
Не знаю, ща попробую в студии проектик создать с ним. Там ошибки? Вроде только всяких мелочей не хватает вроде точек с запятой. Ща, узнаю, что не так.
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
26.04.2012, 00:05 42
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Не знаю, ща попробую в студии проектик создать с ним. Там ошибки? Вроде только всяких мелочей не хватает вроде точек с запятой. Ща, узнаю, что не так.
Вообще должно. И выполниться корректно должно. Я не это имел ввиду. Просто вы не считаете, что такой дизайн немного кривоват?
0
Kuzia domovenok
2357 / 2091 / 494
Регистрация: 25.03.2012
Сообщений: 7,487
Записей в блоге: 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);
0
thick_int
Заблокирован
26.04.2012, 00:09 44
Пока ничего не понял. Просто по русски скажите, в чем могут быть проблемы.
Просто скажите, какая задача вызовет трудности?
0
Kuzia domovenok
2357 / 2091 / 494
Регистрация: 25.03.2012
Сообщений: 7,487
Записей в блоге: 1
26.04.2012, 00:18 45
Ты создал функцию, которая принимает указатель на 2 ромба и делает с ним какое-то действие, свойственное только ромбам.
Например находит точку пересечения их вписанных окружностей.
Для прямоугольника это бессмысленно, а для ромба можно.

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

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

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

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

P.S. Открою Вам страшную тайну. Если в выпуклый многоугольник можно вписать окружность, то радиус оной равен отношению площади данного многоугольника к его полупериметру.
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.04.2012, 12:12 47
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А если у нас есть функция, находящая, скажем вписанную в ромб окружность. И функция находящая описанную вокруг прямоугольника окружность.
Что их, обе дублировать для квадрата?
Плохо знаю геометрию, но тут можно просто перегрузить эти функции для разных фигур.
Ромб не является параллелограммом с точки зрения ООП, т.к. параллелограмм характеризуется 2 сторонами и углом между ними, а ромб - 2 диагоналями, поэтому наследование тут неуместно. И вообще, играться с наследованием и динамическим полиморфизмом стоит как можно реже, вместо них лучше использовать агрегацию и compile-time полиморфизм(шаблоны).
1
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
26.04.2012, 14:02 48
Да, вероятно от ТС так же ждут ещё и использования виртуального наследования.
0
26.04.2012, 14:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2012, 14:02

Множественное наследование
Имеется множественное наследование в виде треугольника. Если в обоих базовых...

Множественное наследование
По этой схеме нужно сделать множественное наследование. Вот код:#include...

Множественное наследование
Вычислите площадь и периметр прямоугольника, если известны его диагональ и одна...


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

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru