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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.95
AndrK189100
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 10
#1

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

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

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

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

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

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

Множественное наследование - C++
Так как у меня эта тема заняла долгое время для изучения ,выкладываю простой пример для освоения #include<iostream> using namespace...

Множественное наследование - C++
Есть два класса Human(fname, lname) и класс Employee c чисто виртуальными функц (зарплата и печать). На базе этих классов нужно создать...

множественное наследование - C++
Почему не компилируется код? #include <iostream> #include <conio.h> #include <string.h> using namespace std; class...

Множественное наследование - C++
7 задание Сделайте пожалуйста, большое спасибо! :good:

Множественное наследование в С++ - C++
Столкнулся с такой проблемой: class D{ ... public: ... void setD(); ... }; class Dd : public D{ ...

множественное наследование - C++
разработайте алгоритм и создайте программы с применением множественного наследования. При выполнении данного задания необходимо создать не...

47
AndrK189100
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 10
25.04.2012, 21:15  [ТС] #16
Это, чисто, учебная задачка. Попросили помочь, а в результате, сам прошу помощи.(((
Как иерархию не строй, все равно, методы для каждого класса будут свои. Мне непонятно, в чем тогда смысл наследования... А сделать надо. Скоро сессия)
0
thick_int
Заблокирован
25.04.2012, 21:18 #17
Цитата Сообщение от gray_fox Посмотреть сообщение
Следуя такому подходу, легче вообще не пользоваться наследованием.
Нет ну если с геометрией не лады, то тогда можно и так.
А вообще, если солидно подходить к подобной задаче, то разумеется (ну к примеру, выбрав за отправную точку понятие параллелограмм), следует предусмотреть ряд конструкторов, которые позволяют по задаваемым параметрам строить этот параллелограмм. А также предусмотреть ряд предикатных функций, позволяющих делать суждения о том, является ли данный параллелограмм ромбом, прямоугольником и квадратом.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
25.04.2012, 21:21 #18
Цитата Сообщение от thick_int Посмотреть сообщение
Нет ну если с геометрией не лады, то тогда можно и так.
А вообще, если солидно подходить к подобной задаче, то разумеется (ну к примеру, выбрав за отправную точку понятие параллелограмм), следует предусмотреть ряд конструкторов, которые позволяют по задаваемым параметрам строить этот параллелограмм. А также предусмотреть ряд предикатных функций, позволяющих делать суждения о том, является ли данный параллелограмм ромбом, прямоугольником и квадратом.
Чепуха. У ТСа задание: реализовать множественное наследование.
Ему нужен Класс Параллелограм м
Ромб - наследник от параллелограмма
Прямоугольник - наследник от параллелограмма
Квадрат- наследник от ромба и прямоугольника.
Например.
Параллелограмм строится по двум сторонам и углу между ними
Прямоугольник по двум сторонам
Ромб по стороне и двум углам,
Квадрат по стороне.
0
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
25.04.2012, 21:22 #19
Цитата Сообщение от AndrK189100 Посмотреть сообщение
Мне непонятно, в чем тогда смысл наследования
Цитата Сообщение от AndrK189100 Посмотреть сообщение
Это, чисто, учебная задачка
смысла тут нет, просто пиши код
0
thick_int
Заблокирован
25.04.2012, 21:24 #20
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Чепуха. У ТСа задание: реализовать множественное наследование.
Не ну кто бы спорил с тем что иногда препы дают оченьглупые задания.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
25.04.2012, 21:28 #21
Цитата Сообщение от thick_int Посмотреть сообщение
Не ну кто бы спорил с тем что иногда препы дают оченьглупые задания.
А иногда студенты не желают слушать преподов
0
AndrK189100
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 10
25.04.2012, 21:33  [ТС] #22
Цитата Сообщение от defer Посмотреть сообщение
смысла тут нет, просто пиши код
Код-то написал, по второму варианту(от параллелограмма) было бы чего писать....
Просто, непонятно, зачем тут наследование. Пойду думать...

Добавлено через 35 секунд
Спасибо всем)
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
25.04.2012, 21:34 #23
Цитата Сообщение от thick_int Посмотреть сообщение
Нет ну если с геометрией не лады, то тогда можно и так.
К чему это?
Цитата Сообщение от thick_int Посмотреть сообщение
А также предусмотреть ряд предикатных функций, позволяющих делать суждения о том, является ли данный параллелограмм ромбом, прямоугольником и квадратом.
Вот это уже имеет смысл.
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ему нужен Класс Параллелограм
Ромб - наследник от параллелограма
Прямоугольник - наследник от параллелограма
Квадрат- наследник от ромба и прямоугольника
+1, наверняка ждут именно этого.
0
thick_int
Заблокирован
25.04.2012, 21:39 #24
Да чего тут писать то.
Я сам вот не могу понять, как можно тут строить иерархию в смысле ООП.
Ну вот мы начертили параллелограмм (запустили конструктор класса параллелограмм). Он уже после этого или ромб или прямоугольник или квадрат (или ни то ни другое) без всякого наследования.
Зачем тут награживать огород, пытаясь применять ООП против здравого смысла.

Добавлено через 2 минуты
Цитата Сообщение от gray_fox Посмотреть сообщение
Ему нужен Класс Параллелограм
Ромб - наследник от параллелограма
Прямоугольник - наследник от параллелограма
Квадрат- наследник от ромба и прямоугольника
Это только видимость. На самом деле тут нет никакой иерархии.
Иногда, к сожалению, принципы ООП и здравый смысл идут не в ногу.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
25.04.2012, 21:44 #25
Цитата Сообщение от thick_int Посмотреть сообщение
Зачем тут награживать огород, пытаясь применять ООП против здравого смысла.
Просто это учебная задача и о здравом смысле вряд ли задумывались, а мы тут просто льём воду не в тему)
0
thick_int
Заблокирован
25.04.2012, 21:47 #26
А если Ваш преподаватель так уж настаивает на множественном наследовании. Ну что ж создайте помимо класса ПАРАЛЛЕЛОГРАММ, еще, например класс МЕТАЛЛ, имеющее одно свойство плотность, а в качестве класса, получаемого наследованием, предложите класс МЕТАЛЛИЧЕСКИЙ ПАРАЛЛЛЕОГРАММ, в котором вычисляется вес оного.
Ну это что-то, имеющее здравый смысл, а не этот интеллектуальный онанизм, которым Вам предлагают заняться.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
25.04.2012, 21:47 #27
Цитата Сообщение от AndrK189100 Посмотреть сообщение
Просто, непонятно, зачем тут наследование.
Не морочьте себе голову, не нужно оно тут.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
25.04.2012, 21:54 #28
Цитата Сообщение от gray_fox Посмотреть сообщение
Не морочьте себе голову, не нужно оно тут.
глупости - это классический пример множественного наследования. Приведи свой, а мы посмотрим как ты понимаешь, зачем и когда оно нужно.
твои предложения enum type{RECT, SQUARE...}
типичное процедурное мышление
0
thick_int
Заблокирован
25.04.2012, 22:04 #29
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
глупости
Тоже придерживаюсь такого же мнения, что наследование тут абсолютно не нужно.

Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Приведи свой, а мы посмотрим как ты понимаешь, зачем и когда оно нужно
Лучше Вы приведите пример, как Вам удасться унаследовать хотя бы ромб от параллелограмма, не вступая в противоречие со здравым смыслом.

Добавлено через 5 минут
Чтобы упростить Вам задачу, оттолкнитесь от конструктора паралллеограмма, который принимает две соседние стороны и диагональ, соединяющую их необщие концы (Этого достаточно, чтобы построить параллелограмм).
Ваши дальнейшие действия...
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
25.04.2012, 22:08 #30
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
твои предложения enum type{RECT, SQUARE...}
типичное процедурное мышление
Звучит как приговор) А пример я привёл, возможно, не совсем корректный. Хотелось сказать, что нет смысла наследовать от параллелограмма ромб и прямоугольник, а потом вводить метод is_square. Ведь достаточно одного класса параллелограмма, а узнать, является ли объект этого класса прямоугольником, ромбом или квадратом, можно с помощью более естественных методов, например, get_width, get_length и get_angle.
0
25.04.2012, 22:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2012, 22:08
Привет! Вот еще темы с ответами:

Множественное наследование - C++
Листинг: #include <iostream> using namespace std; class Person{private: string Fname,Sname,years;}; class Student{private:...

Множественное наследование - C++
Здравствуйте! Делаю следующее задание по подготовке к экзамену по С++. Пока только начал. Вкратце - есть абстрактный класс. Его...

Множественное наследование - C++
Добрый день. У меня имеется базовый класс A. У этого класса есть несколько наследников. Есть еще один класс B, который является...

Множественное наследование - C++
Возник вопрос по теме множественное наследование. Вот скажем у нас определены классы: class Animal{ public: int...


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

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

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