0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 8
|
||||||
1 | ||||||
Наследование. Классы "Точка - Круг - Эллипс"22.09.2015, 11:27. Показов 5824. Ответов 11
Метки нет (Все метки)
Если коротко объяснять суть проблемы:
Класс tEllipse наследует от tCircle метод LineMove (который tCircle унаследовал от tPoint и переопределил). В методе LineMove вызывается функция Draw, которая разная для tCircle и tEllipse. Как сделать так, чтобы метод LineMove вызывал рисование эллипса, а не круга?
0
|
22.09.2015, 11:27 | |
Ответы с готовыми решениями:
11
Наследование классов: реализовать классы точка, линия, треугольник, круг Дружественные классы эллипс и круг Классы точка, круг, элипс Наследование. Класс Круг и класс эллипс |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
22.09.2015, 11:51 | 3 |
Катран, Очень плохой дизайн. Круг не является точкой.
0
|
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 8
|
|
22.09.2015, 12:01 [ТС] | 5 |
Ну вот при вызове LineMove для tEllipse рисуется круг
Мне кажется это из-за того, что LineMove не переопределена для эллипса и принадлежит кругу, и из нее вызов Draw ссылается именно на рисование круга, а не эллипса Сама запуталась Добавлено через 41 секунду Да это задание чисто для развития навыков наследования, надо было сделать иерархию из геометрических фигур, вот я и нафантазировала Добавлено через 39 секунд А как было бы правильно? И, раз уж я совсем туплю, в чем заключается множественное наследование?
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||||||
22.09.2015, 12:01 | 6 | ||||||||||
Вероятно ТС думает, что цепочка наследования вида A->B->C есть множественное наследование.
Катран, множественное наследование появляется когда при объявлении класса указывают несколько базовых классов, например:
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
22.09.2015, 12:01 | 7 |
Катран, Проблема в том, что у вас нет виртуальных функций. В итоге, при вызове LineMove вызывается функция Draw из конкретного класса, а не из класса наследника. Почитайте про виртуальные функции и сделайте функции которые должны быть виртуальными виртуальными.
0
|
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 8
|
|
22.09.2015, 12:08 [ТС] | 8 |
ForEveR, читала про них, пыталась добавлять virtual для функций точки но результат это не изменило. Наверняка я что-то не так делаю, но путной литературы так и не нашла за два дня
Я понимаю, что вызов идет именно из класса, к которому относится функция, и это совсем никак нельзя обойти? Наверняка ведь взрослые серьезные программисты сталкивались с подобной проблемой? Добавлено через 3 минуты Tulosba, спасибо за разъяснение. Если можно, я бы еще хотела понять, почему она кривая. Я из данного множества фигур (точка, отрезок, круг, прямоугольник, треугольник, эллипс, ромб) составляла цепочки наследования по принципу "у точки есть х,у и цвет, а кругу надо добавить еще радиус, значит он может наследовать от точки, только ему еще добавится радиус"
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
22.09.2015, 12:12 | 9 | |||||
Сообщение было отмечено Катран как решение
Решение
Катран, Просто пример с вашей иерархией:
Катран, Открытое наследование подразумевает отношение is-a. Является ли круг точкой? Нет. Тут должна использоваться композиция.
1
|
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 8
|
||||||
22.09.2015, 12:19 [ТС] | 10 | |||||
ForEveR, когда делаю так
Добавлено через 3 минуты ForEveR, не читайте предыдущее сообщение, я уже все поняла надо было еще рисование виртуальной сделать, а я не догадалась Спасибо Вам большое за терпеливые ответы на мои недалекие вопросы! А про отношение надо подумать,про такое нам еще на лекции не говорили
0
|
24.09.2015, 12:29 | 11 | |||||
я не понял, а почему это так? Зачем здесь виртуальные функции? Я даже засомневался, правильно ли я их понимаю, сделал тест и всё у меня работает без виртуальных функций!
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
24.09.2015, 14:43 | 12 |
Kuzia domovenok, У вас есть замещение фукнции action в дочернем классе. У ТС же в классе элипса нет своей замещения функции LineMove.
0
|
24.09.2015, 14:43 | |
24.09.2015, 14:43 | |
Помогаю со студенческими работами здесь
12
Разработать программу с использованием наследования классов, реализующую классы: точка; линия; круг Разработать программу с использованием наследования классов, реализующую классы: точка; линия; круг как изобразить на экране точку, отрезок прямой, прямоугольник, круг, эллипс, ломаную линию? Создать обьект класса Круг, используя классы Точка и Окружность Используя различные фигуры (точка, линия, эллипс, круг, прямоугольник и др.) вывести в окне фигуры: домик, человечек, солнце. Фигуры должны быть запол Круг или эллипс Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |