|
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
|
|
Вопрос по наследованию09.11.2011, 17:48. Показов 5260. Ответов 52
Метки нет (Все метки)
Уже неоднократно перечитывал главы про наследования и все равно до конца не разобрался.
Вот например у нас есть класс Четырехугольник, и мы создаем класс Прямоугольник. И в том и в другом классе есть функции Площадь и если у них будет одинаковая сигнатура, то вызовется функция того класса, объект которого мы создали. Если же сигнатуры совпадать не будут, то нужно явно указать с помощью оператора ::. Если мы сделаем функцию площади виртуальной, то при одинаковых сигнатурах вызовется функция своего класса. То же в случае разных сигнатур. То есть единственный плюс объявления функций виртуальными, это то что если мы создадим указатель на объект базового класса, он сможет указывать и на объект производного класса?
0
|
|
| 09.11.2011, 17:48 | |
|
Ответы с готовыми решениями:
52
Вопрос по наследованию вопрос по наследованию Вопрос по наследованию |
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 10.11.2011, 20:30 | ||
|
Отключать ассерты в релизе не есть хорошо. Стандартный ассерт УГ, сакс и фтопку.
0
|
||
|
Заблокирован
|
|||
| 10.11.2011, 20:35 | |||
|
Если ваш манипулятор ожидает на входе кирпич, то он и должен принимать только кирпичи, а не все мыслимые и не мыслимые прямоугольники. Если манипулятор ожидает на входе все мыслимые и не мыслимые прямоугольники, то он должен быть готов к тому, что придти может и кирпич, и квадрат. Если манипулятор не делает различий между кирпичом и квадратом, но в рантайме ломает все квадраты - это архитектурный фейл. Проектирование по принципу: "Я не запрещаю тебе быть квадратом, но если ты реально окажется квадратом, то я заломаю нафег всю программу" Это проектирование по принципу: "Здесь, здесь и здесь я закопаю мину. Специально, что бы взрывать полностью работоспособный процесс". Добавлено через 2 минуты
1
|
|||
| 10.11.2011, 20:37 | |
|
Не по теме: Bers, зачетные цитаты.
0
|
|
|
Заблокирован
|
||
| 10.11.2011, 20:39 | ||
) и гадать, а не приведёт ли она квадрат в противоречивое состояние, что в случае наследования от прямоугольника сделать легко. Так что если найдётся хоть один способ привести квадрат в противоречивое состояние через его же интерфейс, значит вся иерархия тухлая.
0
|
||
|
Заблокирован
|
||
| 10.11.2011, 20:41 | ||
|
Главный принцип: указатель базового типа запустит метод потомка, если сам указатель будит указывать на этого потомка, а сам метод будит виртуальным. Если метод будит не виртуальным, запустится базовый метод. По моему, вполне достаточно для понимания)
0
|
||
|
Заблокирован
|
||
| 10.11.2011, 20:41 | ||
|
0
|
||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 10.11.2011, 20:43 | ||
|
Есть метод изменения ширины, который должен изменять ширину. В квадрате же он должен синхронно изменять и высоту. Метод "ИзменитьШирину", который изменяет высоту это ведь не правильно. С этим ты готов согласиться? Это нарушение логики. Т.е. для квадрата методы ЗадатьШирину и ЗадатьВысоту должны быть закрыты и вместо них должен быть добавлен метод ЗадатьРазмер. Т.е. квадрат не является прямоугольником с точки зрения интерфейса (с точки зрения геометрии, разумеется, он является прямоугольником и четырёхугольником), и если и можно его наследовать, то только закрытым наследованием от rectangle.
0
|
||
|
Заблокирован
|
||
| 10.11.2011, 20:43 | ||
|
0
|
||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|||
| 10.11.2011, 20:46 | |||
|
Добавлено через 1 минуту
0
|
|||
|
Заблокирован
|
||
| 10.11.2011, 21:02 | ||
|
Для прямоугольника: Изменяем высоту - изменится высота. Изменяем ширину - изменится ширина. Для квадрата - изменяем хоть ширину, хоть высоту. Все равно запускается родной для квадрата метод "изменить размер" То есть метод "изменить ширину" для квадрата такой же правомерный, как и для любого другого прямоугольника. Но реализация метода отличается тем, что для квадрата изменится не только ширина, но и высота. Я имею полное право изменить ширину квадрата. Что мне мешает это сделать? Я не имею права для квадрата изменить ширину, а высоту оставить прежней. Но об этом контракте позаботится сам квадрат. Его реализации методов "изменить ширину/высоту". Для прямоугольника метод "изменить ширину" - изменит ширину фигуры. При этом, может изменится и высота, если фигура - квадрат. Что здесь нелогичного? Я хочу сказать, что у прямоугольника при изменении ширины, высота не обязана сохранять прежнее значение. Вы можете сказать: но это тупо! Зачем квадрату вообще иметь методы "изменить ширину/высоту", если идеологически ему нужен только один метод "ИзменитьРазмер" ? Тут я с вами соглашусь полностью. Для квадрата первые два интерфейса кажутся излишними. Но это - зависит от архитектурного решения. Такое решение может быть не самое красивое, с точки зрения минимализма, но вполне приемлимое. Об этом и пишет Маерс (я по крайней мере так его понял) - о том, что оо-программирование, это в первую очередь программирование в терминах интерфейсов. И при установлении различных отношений между классами, в первую очередь нужно согласовывать интерфейсы предков и потомков, что бы не получилось "аляписто". Что бы не пришлось на некоторые методы вообще ставить заглушки (метод как бы есть, а использовать его нельзя). Что бы не получилось что методов больше, чем требуется объекту по смыслу. Хотя пример для иллюстрации он привел фейловый Добавлено через 1 минуту
0
|
||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||
| 10.11.2011, 21:31 | ||
|
Этот A.Call() и вызывает внутри себя базовый метод f(), который не виртуальный. А если сделать f() виртуальным, то A.Call() будет вызывать f() по типу объекта А.
0
|
||
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
||
| 10.11.2011, 22:35 | ||
|
0
|
||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||
| 11.11.2011, 08:44 | ||
Потому как при трансляции базового класса компилятор НИФИГА не знает о наследниках. Поэтому НАМЕРТВО связывает CALL со своей f() ПРИ КОМПИЛЯЦИИ. Если же мы пишем virtual, то это мы подсказываем компилятору: погоди намертво связывать, наследники будут. И компилятор формирует код, который связывает вызов ПРИ ВЫПОЛНЕНИИ программы...
1
|
||
| 11.11.2011, 08:44 | |
|
По наследованию Непонятка по наследованию Вопросы по наследованию Работа в Eclipse по наследованию Задачка по наследованию классов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|