1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
| Account |
4.07.2011 18:10
Сообщение
#1
|
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 212 Пол: Мужской Репутация: 0 |
Есть вот такая программа.
По меню по очереди можно вывести бабочку, потом шестиугольник правильный, потом комбинированно бабочку в шестиугольнике. Бабочки и шестиугольник наследники от общего класса фигуры, а вот комбо от бабочки и шестиугольника. Не пойму вот следующее по идее класс Combo должен ведь унаследовать методы Move и SetNewColor, так как он наследник от Butterfly и Hex, которые в свою очередь наследуют данный метод от Figure. Но если выкинуть эти методы как сделано в выше представленном коде и напрямую обращаться например F3.SetNewColor(color);F3.Move(10*direction,10*direction); естественно компилятор материться. Так как правильно оформить наследственность и добраться до данных методов, не прописывая их в классе Combo и естественно не описывая так void Combo::Move(int x) P.S. Как в спойлер код скрывать, а то как то не красиво длинный пост получается? |
![]() ![]() |
| IUnknown |
4.07.2011 19:33
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата преподаватель говорит зачем создавать методы void Hide(); void Move(int x); void SetNewColor(int colr); у данного класса, ведь они наследуются. Вот мне интересно как их использовать без создания а по наследству Преподаватель в своем уме? При множественном наследовании методов (да еще и виртуальных) с одинаковыми именами и с одной областью видимости (они все описываются в public-разделе, и наследование всегда общее, то есть все они видимы в потомках) возникает неоднозначность, которую компилятор не имеет права разрешать. Скажем:#include <iostream>Так что даже не выдумывай, без переопределения в классе Combo этой "прослойки" не обойдешься. Кстати, Липпман именно такой способ называет хорошим тоном программирования. Но у тебя есть еще одна загвоздка. Еще раз смотри: (Показать/Скрыть)
Оно тебе надо, чтоб базовый класс инициализировался 2 раза? Не надо. Решение: (Показать/Скрыть)
|
Account Классы, наследственность 4.07.2011 18:10
IUnknown А теперь еще раз: что выкинуть? Где компилятор мат... 4.07.2011 18:35
Account IUnknown, описание класса Combo
class Combo:publi... 4.07.2011 19:03
Account
Преподаватель в своем уме?
.....
Чувствуешь разни... 4.07.2011 19:42
sheka т.е. на всякий случай лучше всегда делать виртуаль... 4.07.2011 19:51
IUnknown На всякий случай надо знать об этом подводном каме... 4.07.2011 20:03
Account Кстати, столкнулся еще с проблемой такой, что оста... 4.07.2011 20:53
IUnknown Вот кстати, без виртуального наследования следы од... 4.07.2011 21:29
Account IUnknown, добавил виртуальное наследование к бабоч... 5.07.2011 16:33
IUnknown :) Я знал, что так и будет... Вас что, не учили в... 5.07.2011 17:00
Account Очередной раз спасибо за разъяснение. Учусь на зао... 5.07.2011 17:59![]() ![]() |
|
Текстовая версия | 8.12.2025 16:34 |