|
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
|
|
Вопрос по наследованию09.11.2011, 17:48. Показов 5247. Ответов 52
Метки нет (Все метки)
Уже неоднократно перечитывал главы про наследования и все равно до конца не разобрался.
Вот например у нас есть класс Четырехугольник, и мы создаем класс Прямоугольник. И в том и в другом классе есть функции Площадь и если у них будет одинаковая сигнатура, то вызовется функция того класса, объект которого мы создали. Если же сигнатуры совпадать не будут, то нужно явно указать с помощью оператора ::. Если мы сделаем функцию площади виртуальной, то при одинаковых сигнатурах вызовется функция своего класса. То же в случае разных сигнатур. То есть единственный плюс объявления функций виртуальными, это то что если мы создадим указатель на объект базового класса, он сможет указывать и на объект производного класса?
0
|
|
| 09.11.2011, 17:48 | |
|
Ответы с готовыми решениями:
52
Вопрос по наследованию вопрос по наследованию Вопрос по наследованию |
|
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
|
||
| 10.11.2011, 08:29 | ||
|
конкретно по вопросу ramarren14
При объявлении функции виртуальной, компилятор выбирает функцию, удовлетворяющему тому, что занесено в указатель, а не типу указателя.
0
|
||
|
Заблокирован
|
|
| 10.11.2011, 08:44 | |
|
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||||||||||||
| 10.11.2011, 08:54 | ||||||||||||
![]() По поводу наследования и виртуальности. При наследовании (в С++ - только при открытом) работает принцип подстановки: на место объекта (указателя, ссылки) можно подставить объект производного класса. Обратно - нельзя. Наболее понятный пример: часы-будильник. Часы - базовый класс, будильник - наследник. Будильник является часами, но часы - не будильник. По поводу виртуальности - она без наследования совершенно бесполезна. А при наследовании полезна, например вот здесь:
Однако!
А если сделать ее виртуальной, то вызывается своя для каждого типа.
0
|
||||||||||||
|
Заблокирован
|
||
| 10.11.2011, 09:00 | ||
|
это все здорово, только у нас есть конкретная задача - отнаследовать прямоугольник от четырёх угольника. В чем проблема?
Добавлено через 1 минуту
0
|
||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 10.11.2011, 09:05 | ||
|
0
|
||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 10.11.2011, 09:16 | |
|
0
|
|
|
Заблокирован
|
||
| 10.11.2011, 10:03 | ||
|
Нет в примере Мейерса ничего дебильного, он же не виноват, что ты отрываешь книгу и видишь в ней фигу, а потом ещё и копируешь и тоже видишь при этом фигу. У меня уже слов нету, ты уже трижды пытался меня убедить в том, что этот ассерт запрещает иметь одинаковые смежные стороны прямоугольнику, что просто не соответсвует действительности! Или ты думаешь что если повторить ложь много раз, то она станет правдой или я в неё поверю? Нет. Если это какая то шутка, то я её не понял
0
|
||
|
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 10
|
|
| 10.11.2011, 10:23 | |
|
У мя аж глаз задергался, так что все таки вызывает A.Call
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|||||||
| 10.11.2011, 12:23 | |||||||
|
С виртуальностью f() вызывается функция по типу объекта A. Аналогично с указателями:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 10
|
||
| 10.11.2011, 14:25 | ||
|
0
|
||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 10.11.2011, 15:02 | |
|
bob2005, представьте, что у вас есть много разных геометрических фигур (квадраты, прямоугольники, круги и т.д.), все они наследники класса Shape. Пусть пользователь сам выбирает, сколько будет фигур, какие это будут фигуры и в каком порядке они создаются. Каждая фигура умеет себя рисовать (метод draw виртуальный). Фигура создаётся так: в массив указателей на Shape помещается адрес конкретной фигуры, только что созданной. И теперь, чтобы отрисовать все фигуры, нам просто-напросто надо пройтись по всему массиву shapes и для каждого элемента вызвать метод draw.
2
|
|
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
|||||||
| 10.11.2011, 17:15 | |||||||
|
Но не понятно, почему A.call() вызывает метод f() класса Base, если объект A имеет тип Derived, в котором метод f() переопределен. Вот пример, где вызывается именно метод класса Derived.
0
|
|||||||
|
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
|
|
| 10.11.2011, 17:47 [ТС] | |
|
Ну так все верно. А если нужно, чтобы вызвался метод Base, надо A.Base::fun();
0
|
|
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
|
| 10.11.2011, 18:11 | |
|
0
|
|
|
Заблокирован
|
|||||||
| 10.11.2011, 19:23 | |||||||
|
А теперь смотрим код:
1. Почему Манипулятор принимает на входе ПРЯМОУГОЛЬНИК, но при этом запрещает быть ему квадратом? Квадрат, это что? Не прямоугольник что ли? 2. Почему Манипулятор таким грубейшим образом пытается вмешиваться во внутреннею работу объекта, и снаружи, игнорируя мнения объектов, за них решает, валидные они или нет? 3. Если вы на вход подадите объект "квадрат". Он у вас отработает. Абсолютно правильно. Так, как от него и ожидается. Но при этом все равно сработает ассерт. Так вот, почему ассерт заламывает абсолютно работоспособный процесс программы? Ну то есть, никакого сбоя нет в системе, а ассерт все равно всю программу аварийно тормознул. То есть этот сферический конь в вакууме - хорошая иллюстрация ущербной архитектуры. Хороший пример того, как делать не надо.
1
|
|||||||
| 10.11.2011, 19:24 | ||
|
0
|
||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|||
| 10.11.2011, 19:35 | |||
|
0
|
|||
|
Заблокирован
|
|||
| 10.11.2011, 19:38 | |||
|
class Derived : public Base {} У класса Derived нет своего метода Call(); Этот метод есть только у Base Однако, после компиляции никаких Base уже не существует, как не существует и первоначального Derived . Существует неккий "результирующий" Derived . Который имеет метод Call() как свой собственный. Как будто бы он был прописан в Derived , а не в Base А вот если у Base и у Derived есть одноименные методы, то у результирующего Derived так же будут оба эти методы "как родные", но жить будут немножко по разным адресам. Тип данных Derived будит знать "где живёт метод родной для Derived" Тип данных Base будит знать "где живёт метод родной для Base " Я ж ссылочку кидал, где расписан "низкоуровневый взгляд на полиморфизм". Там это все очень подробно расжовано. Добавлено через 1 минуту Это все равно что сказать: "Я не запрещаю тебе быть квадратом, но если ты реально окажется квадратом, то я заломаю нафег всю программу"
1
|
|||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||||||
| 10.11.2011, 19:47 | ||||||||
|
Ведь согласись, что следующая реализация метода не может быть у квадрата
0
|
||||||||
|
Заблокирован
|
||||
| 10.11.2011, 20:27 | ||||
|
0
|
||||
| 10.11.2011, 20:27 | |
|
По наследованию Непонятка по наследованию Вопросы по наследованию Работа в Eclipse по наследованию Задачка по наследованию классов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Локальный 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.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|