Форум программистов, компьютерный форум 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
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.04.2012, 18:48     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #2
второй вариант верный
наследник должен быть частным случаем родителя.
всякий ромб и всякий прямоугольник есть параллелограм, но не каждый параллелограм - ромб или прямоугольник.
Всякий квадрат это ромб, также всякий квадрат это прямоугольник,
но не каждый ромб или прямоугольник есть квадрат
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.04.2012, 18:59     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #3
По хорошему тут наследование, тем более множественное, вообще не стоит использовать. Максимум агрегацию, но и она тут не нужна.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.04.2012, 19:18     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #4
Цитата Сообщение от diagon Посмотреть сообщение
По хорошему тут наследование, тем более множественное, вообще не стоит использовать. Максимум агрегацию, но и она тут не нужна.
Пример множественного наследования не всегда легко придумать. В учебных целях часто дают примеры с фигурами.

Добавлено через 2 минуты
А если у нас есть функция, находящая, скажем вписанную в ромб окружность. И функция находящая описанную вокруг прямоугольника окружность.
Что их, обе дублировать для квадрата?
thick_int
Заблокирован
25.04.2012, 20:05     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #5
Квадрату, как это ни удивительно, вообще нет места в этой иерархии, ибо
1) Прямоугольник - ЭТО ПАРАЛЛЕЛОГРАММ, все углы которого равны.
2) Ромб - ЭТО ПАРАЛЛЕЛОГРАММ, все стороны которого равны.

Поэтому к квадрату мы можем прийти и от ромба и от прямоугольника. Достаточно, поэтому, снабдить каждый из классов прямоугольника и ромба функцией bool IsSquare (может быть и чистой виртуальной в базовом классе параллелограмм).
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.04.2012, 20:23     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #6
Цитата Сообщение от thick_int Посмотреть сообщение
Поэтому к квадрату мы можем прийти и от ромба и от прямоугольника. Достаточно, поэтому, снабдить каждый из классов прямоугольника и ромба функцией bool IsSquare (может быть и чистой виртуальной в базовом классе параллелограмм).
Ты о множественном наследовании слышал?
thick_int
Заблокирован
25.04.2012, 20:26     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ты о множественном наследовании слышал?
Нуу слышать то слышал, но к зачем оно тут?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.04.2012, 20:27     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #8
Цитата Сообщение от thick_int Посмотреть сообщение
Квадрату, как это ни удивительно, вообще нет места в этой иерархии, ибо
1) Прямоугольник - ЭТО ПАРАЛЛЕЛОГРАММ, все углы которого равны.
2) Ромб - ЭТО ПАРАЛЛЕЛОГРАММ, все стороны которого равны.
Ты о множественном наследовании слышал? Это как раз тот самый случай. Квадрат это И ромб И прямоугольник. Он обладает свойствами и того и другого.
В квадрат может быть вписана окружность, как в ромб
И Квадрат может быть вписан в окружность, как прямоугольник,

У квадрата равные стороны как у ромба
И У квадрата прямые углы как у прямоугольника.

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


Цитата Сообщение от thick_int Посмотреть сообщение
Достаточно, поэтому, снабдить каждый из классов прямоугольника и ромба функцией bool IsSquare (может быть и чистой виртуальной в базовом классе параллелограмм).
Давайте вообще наследование отменим.
Создадим базовый класс параллелограм и Сделаем в нём четыре "ЧистоРеальных" функции isSquare isRomb isRectangle,
Можно ещё добавить функций IsTriangle isCircle isPolygon Тогда даже от параллелограма наследовать не надо: все фигуры под рукой :dance3:
thick_int
Заблокирован
25.04.2012, 20:31     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #9
Ну тут немножко не так. Если Вы беретесь производить один класс от другого, то это прежде всего предполагает наделение его некими свойствами, которых нет в базовом. Тут же этого напрочь нет.
Ну чертили Вы ромб и неожиданно оказалось, что диагонали этого ромба равны между собой.
Это далеко не повод выделять такой объект в отдельный класс.
Тут не в программировании дело, а в здравом смысле.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
25.04.2012, 20:53     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #10
Единственное, что приходит в голову - объединить их каким-нибудь интерфейсом с методом вычисления площади.
Цитата Сообщение от thick_int Посмотреть сообщение
снабдить каждый из классов прямоугольника и ромба функцией bool IsSquare
Никогда так не делайте.
thick_int
Заблокирован
25.04.2012, 20:55     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Никогда так не делайте.
Обоснуйте.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.04.2012, 20:55     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #12
так давайте вообще наследование отменим и ООП и всё. Я не против. можно.
Ты этого хочешь, я понять не могу?
По-моему, ты слегка не понимаешь суть наследования.
thick_int
Заблокирован
25.04.2012, 21:02     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #13
Дело не в наследовании, а в том, что применять его нужно по делу.
Вообще наследование хорошо, когда можно инкапсуулировать некоторые свойства в абстрактных сущностях (например, абстрактный класс ЧЕЛОВЕК).

В геометрии же параллелограмм так же реален, как и квадрат и ромб и прямоугольник.
Ну немного по другому действовать надо.
Мы не получаем каждую. слежующую фигуру естественным образом, как реальное воплощение предыдущей абстракции. Нет ну за уши можно притянуть ООП и сюда, но зачем?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
25.04.2012, 21:05     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #14
Цитата Сообщение от thick_int Посмотреть сообщение
Обоснуйте.
Следуя такому подходу, легче вообще не пользоваться наследованием. Делать как-нибудь так:
C++
1
2
3
4
5
6
7
8
9
10
11
class Figure {
public:
    enum type {SQUARE, TRIANGLE etc. };
 
    type get_type() const {
        return figType;
    }
 
private:
    type figType;
};
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.04.2012, 21:05     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #15
Базовый класс не обязан быть абстрактным. Если ты используешь наследование исключительно от абстрактных классов, ты не полностью понимаешь, зачем оно нужно.

Добавлено через 36 секунд
Цитата Сообщение от gray_fox Посмотреть сообщение
Следуя такому подходу, легче вообще не пользоваться наследованием. Делать как-нибудь так:
Я об этом тоже писал ему
AndrK189100
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 10
25.04.2012, 21:15  [ТС]     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #16
Это, чисто, учебная задачка. Попросили помочь, а в результате, сам прошу помощи.(((
Как иерархию не строй, все равно, методы для каждого класса будут свои. Мне непонятно, в чем тогда смысл наследования... А сделать надо. Скоро сессия)
thick_int
Заблокирован
25.04.2012, 21:18     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #17
Цитата Сообщение от gray_fox Посмотреть сообщение
Следуя такому подходу, легче вообще не пользоваться наследованием.
Нет ну если с геометрией не лады, то тогда можно и так.
А вообще, если солидно подходить к подобной задаче, то разумеется (ну к примеру, выбрав за отправную точку понятие параллелограмм), следует предусмотреть ряд конструкторов, которые позволяют по задаваемым параметрам строить этот параллелограмм. А также предусмотреть ряд предикатных функций, позволяющих делать суждения о том, является ли данный параллелограмм ромбом, прямоугольником и квадратом.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.04.2012, 21:21     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #18
Цитата Сообщение от thick_int Посмотреть сообщение
Нет ну если с геометрией не лады, то тогда можно и так.
А вообще, если солидно подходить к подобной задаче, то разумеется (ну к примеру, выбрав за отправную точку понятие параллелограмм), следует предусмотреть ряд конструкторов, которые позволяют по задаваемым параметрам строить этот параллелограмм. А также предусмотреть ряд предикатных функций, позволяющих делать суждения о том, является ли данный параллелограмм ромбом, прямоугольником и квадратом.
Чепуха. У ТСа задание: реализовать множественное наследование.
Ему нужен Класс Параллелограм м
Ромб - наследник от параллелограмма
Прямоугольник - наследник от параллелограмма
Квадрат- наследник от ромба и прямоугольника.
Например.
Параллелограмм строится по двум сторонам и углу между ними
Прямоугольник по двум сторонам
Ромб по стороне и двум углам,
Квадрат по стороне.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
25.04.2012, 21:22     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #19
Цитата Сообщение от AndrK189100 Посмотреть сообщение
Мне непонятно, в чем тогда смысл наследования
Цитата Сообщение от AndrK189100 Посмотреть сообщение
Это, чисто, учебная задачка
смысла тут нет, просто пиши код
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2012, 21:24     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
thick_int
Заблокирован
25.04.2012, 21:24     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм #20
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Чепуха. У ТСа задание: реализовать множественное наследование.
Не ну кто бы спорил с тем что иногда препы дают оченьглупые задания.
Yandex
Объявления
25.04.2012, 21:24     Множественное наследование: прямоугольник, квадрат, ромб, параллелограмм
Ответ Создать тему
Опции темы

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