| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > виртуальны функции: преимущества на практике |
| Автор: bomberman 14.11.2008, 13:22 |
Привет! 1) Однажды на собеседовании задали вопрос: покажите на примере (напишите С++ код) и объясните в чем преимущества и (когда без них практически не обойтись) применения виртуальных функций. 2) Я знаю, что виртуальные функии применяются в технологии COM и при создании плагинов Можно объяснить в общем, для чего именно они там используются, что без них не обойтись 3) В каком источнике можно найти обоснование того, что указатель базового неполиморфного класса ссылаясь на объект полиморфного производного класса не вызовет виртуальный метод производного класса, т.е. не выполнится динамическое связывание Большое спасибо! |
| Автор: J0ker 14.11.2008, 20:34 | ||||
для бинарной совместимости применяют соглашения о вызове в COM виртуализация применяется для работы с объектами посредством абстрактных интерфейсов |
| Автор: mes 14.11.2008, 21:56 | ||
Алек86 имел ввиду не сами виртуальные функции, а абстрактный класс. На примере использования в качестве интерфейса между двумя (возможно) бинарно не совместимыми кодами. Добавлено через 1 минуту и 37 секунд
опять пол поста прочитал - и ответил, а ниже оказывается уже естж такое . ) |
| Автор: powerfox 15.11.2008, 18:05 | ||
| bomberman, почитайте что-нибудь по ООП, это ключевая вещь. Виртуальные функции обеспечивают динамический полиморфизм. Гугл в первой же строке дал ответ на ваш вопрос: http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4
Виртуальная функций != виртуализация (во всяком случае я такого употребления слова не встречал). |
| Автор: J0ker 15.11.2008, 18:30 | ||
ну ессесна != ибо первое - конкретное применение второго |
| Автор: powerfox 16.11.2008, 00:48 |
Да? ;) http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F |
| Автор: J0ker 16.11.2008, 04:45 | ||
при чем тут, собстна, виртуализация в вычислениях? если у вас плохо с английским - так и скажите |
| Автор: powerfox 16.11.2008, 15:39 |
| J0ker, покажите мне, пожалуйста, где в литературе по ООП используется слово «виртуализация» в отношении виртуальных функций? |
| Автор: mes 16.11.2008, 16:25 | ||||
вот к примеру (первое попавшее под руку)
http://www.helloworld.ru/texts/comp/lang/builder/builder/3.htm |
| Автор: powerfox 16.11.2008, 17:28 |
Я имел в виду нормальные источники, а не левые ресурсы. Например, стандарт С++, документацию по g++ или «ЯП С++» Стауструпа (у меня есть только на русском). Ни там, ни там слово виртуализация не встречается. А в стандарте находится вся необходимая информация для разработки компилятора. Если обратиться к гуглу, то можно найти несколько страниц, где используют слово «виртуализация», но правильнее (точнее правильно) было бы использовать термин «динамический полиморфизм». |
| Автор: mes 16.11.2008, 19:00 |
| динамический полиморфизм и виртуализация и виртуальные функции это не одно и то же. Виртуальные функции это один из методов реализации виртуализации, на основе которой и работает динамический полиморфизм. |
| Автор: J0ker 16.11.2008, 19:20 |
Модератор: Сообщение скрыто. |
| Автор: powerfox 16.11.2008, 21:55 | ||
| J0ker, расслабьтесь и давайте без матов. Всё равно речь идёт об одном и том же. Я высказал своё мнение, вы своё.
Я встречал выражение «dynamic despatch». Таблицу виртуальных методов так же иногда называют таблицей диспетчеризации. Хоть это и редко употребляется (и в основном в отношении управления процессами), но с термином «диспетчеризация» ещё можно согласиться. |
| Автор: J0ker 19.11.2008, 23:54 | ||||
меня немного побанили вопрос, собственно, в филологии я ответственно заявляю, что в данном контексте термин виртуализация абсолютно применим и будет понят любым специалистом без дополнительных пояснений Добавлено через 2 минуты и 25 секунд т.к. вы любитель словарей, вот ссылка http://en.wikipedia.org/wiki/Virtualizing
|
| Автор: powerfox 20.11.2008, 00:43 | ||
С возвращением
Угу. Именно с этим значением я и знаком. Но я не думаю, что «abstraction of computer resources» имеет отношение к вызову виртуальных функций. Используется специальная таблица, нахождение адреса вызова находитсяопределённым способом и виртуализации каких-либо ресурсов не происходит имхо. Тут нужно вникнуть в то, как механизм работает ) |
| Автор: mes 20.11.2008, 01:07 | ||
ну раз Вы подходите с этой стороны(со стороны реализации, а не абстракции понятия), то интересно как по вашему мнению достигается «abstraction of computer resources» ? неужто обходится без специальной таблицы? |
| Автор: J0ker 20.11.2008, 05:04 | ||
имеет самое непосредственное это не просто совпадение названий - так названо потому, что так оно и есть на самом деле |