1 / 1 / 0
Регистрация: 05.07.2013
Сообщений: 176
|
|||||||||||
1 | |||||||||||
Зачем нужны виртуальные методы?19.04.2015, 12:06. Просмотров 2000. Ответов 11
Метки нет Все метки)
(
Тут она не виртуальная
0
|
|
19.04.2015, 12:06 | |
Виртуальные методы Виртуальные методы Виртуальные методы |
|
Ушел с форума
![]() |
|
19.04.2015, 12:10 | 2 |
Фишка в том, что вы можете не знать, какой на самом деле объект
скрывается за указателем/ссылкой на базовый класс.
0
|
:)
![]() 4765 / 3259 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
19.04.2015, 12:11 | 3 |
В некоторых случаях действительно не можешь. Например, представь, что у тебя массив указателей на базовый (или функция, которая принимает параметр указателя/ссылки на базовый класс) тип и нужно вызвать функцию реального (динамического) типа объекта. Тут как раз хорошо использовать виртуальную функцию. Иначе пришлось бы или использовать dynamic_cast (который всё равно требует хотя бы одной виртуальной функции в базовом классе) или добавлять в объект свои поля типа (переменная, которая говорит о динамическом типе объекта).
0
|
Ушел с форума
![]() |
||||||
19.04.2015, 12:13 | 4 | |||||
...что при наличии кучи разных типов объектов приводит к очень "веселым" картинкам:
0
|
1 / 1 / 0
Регистрация: 05.07.2013
Сообщений: 176
|
|
19.04.2015, 12:16 [ТС] | 6 |
Убежденный, Tulosba, то есть, если у меня скажем функция возвращает тип void * и мне тут же нужно выбрать метод нужного производного класса, то как я понял, выходом будет виртуальная функция ?
0
|
1 / 1 / 0
Регистрация: 05.07.2013
Сообщений: 176
|
|
19.04.2015, 12:21 [ТС] | 8 |
Tulosba, тогда не могу понять зачем мне ссылка на базовый класс ? Если базовый класс это скажем Фигура, а производные Треугольник и что-то ещё, то зачем мне таки указатель на Фигуру ?
0
|
:)
![]() 4765 / 3259 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
19.04.2015, 12:40 | 9 | |||||
Допустим, есть метод, который делает поворот фигуры, а потом отображает её. И методу этому абсолютно по барабану какая конкретно там фигура: треугольник, квадрат, круг или что-то ещё. Он прост до безобразия:
Ферштейн? ![]()
0
|
1 / 1 / 0
Регистрация: 05.07.2013
Сообщений: 176
|
|
19.04.2015, 12:50 [ТС] | 10 |
Tulosba, то есть это сделано лишь для удобства пользования, как, скажем и ссылки в c++ ? И правда ли, что, если у нас в классе присутствует хотя бы одна в иртуальная функция, деструктор также следует сделать виртуальным ?
0
|
502 bad gateway
![]() 4500 / 3661 / 1538
Регистрация: 24.04.2014
Сообщений: 10,783
|
||||||
19.04.2015, 13:01 | 11 | |||||
даже если нет виртуальных методов.
0
|
:)
![]() 4765 / 3259 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
19.04.2015, 13:30 | 12 |
деструктор надо делать виртуальным, если используется полиморфное удаление объекта (как уже продемонстрировал Jewbacabra). В общем же случае необходимость в виртуальном деструкторе отсутствует, несмотря на наличие других виртуальных функций. Но во избежании проблем при дальнейшей разработке, разумно сделать деструктор базового класса виртуальным.
0
|
19.04.2015, 13:30 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. виртуальные методы виртуальные методы
Виртуальные методы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |