![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| bomberman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 4.4.2008 Где: Брест Репутация: нет Всего: нет |
Привет! 1) Однажды на собеседовании задали вопрос: покажите на примере (напишите С++ код) и объясните в чем преимущества и (когда без них практически не обойтись) применения виртуальных функций. 2) Я знаю, что виртуальные функии применяются в технологии COM и при создании плагинов Можно объяснить в общем, для чего именно они там используются, что без них не обойтись 3) В каком источнике можно найти обоснование того, что указатель базового неполиморфного класса ссылаясь на объект полиморфного производного класса не вызовет виртуальный метод производного класса, т.е. не выполнится динамическое связывание Большое спасибо! |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
для бинарной совместимости dll и exe, к примеру (вообще-то там использубтся не сами виртуальные функции, а то, что они хранятся в виде таблицы указателей на функции) по сабжу - почитай в инете про полиморфизм к примеру, тута |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
для бинарной совместимости применяют соглашения о вызове в COM виртуализация применяется для работы с объектами посредством абстрактных интерфейсов Это сообщение отредактировал(а) J0ker - 14.11.2008, 20:34 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Алек86 имел ввиду не сами виртуальные функции, а абстрактный класс. На примере использования в качестве интерфейса между двумя (возможно) бинарно не совместимыми кодами. Добавлено через 1 минуту и 37 секунд
опять пол поста прочитал - и ответил, а ниже оказывается уже естж такое . ) |
|||
|
||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
bomberman, почитайте что-нибудь по ООП, это ключевая вещь. Виртуальные функции обеспечивают динамический полиморфизм.
Гугл в первой же строке дал ответ на ваш вопрос: http://ru.wikipedia.org/wiki/%D0%92%D0%B8%...%82%D0%BE%D0%B4
Виртуальная функций != виртуализация (во всяком случае я такого употребления слова не встречал). |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
||||
|
||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
||||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
при чем тут, собстна, виртуализация в вычислениях? если у вас плохо с английским - так и скажите |
|||
|
||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
J0ker, покажите мне, пожалуйста, где в литературе по ООП используется слово «виртуализация» в отношении виртуальных функций?
|
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот к примеру (первое попавшее под руку)
http://www.helloworld.ru/texts/comp/lang/b...r/builder/3.htm Это сообщение отредактировал(а) mes - 16.11.2008, 16:25 |
||||
|
|||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
Я имел в виду нормальные источники, а не левые ресурсы. Например, стандарт С++, документацию по g++ или «ЯП С++» Стауструпа (у меня есть только на русском). Ни там, ни там слово виртуализация не встречается. А в стандарте находится вся необходимая информация для разработки компилятора. Если обратиться к гуглу, то можно найти несколько страниц, где используют слово «виртуализация», но правильнее (точнее правильно) было бы использовать термин «динамический полиморфизм». Это сообщение отредактировал(а) powerfox - 16.11.2008, 17:28 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
динамический полиморфизм и виртуализация и виртуальные функции это не одно и то же. Виртуальные функции это один из методов реализации виртуализации, на основе которой и работает динамический полиморфизм.
|
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
Модератор: Сообщение скрыто. |
|||
|
||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
J0ker, расслабьтесь и давайте без матов. Всё равно речь идёт об одном и том же.
Я высказал своё мнение, вы своё.
Я встречал выражение «dynamic despatch». Таблицу виртуальных методов так же иногда называют таблицей диспетчеризации. Хоть это и редко употребляется (и в основном в отношении управления процессами), но с термином «диспетчеризация» ещё можно согласиться. |
|||
|
||||
| J0ker |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
меня немного побанили вопрос, собственно, в филологии я ответственно заявляю, что в данном контексте термин виртуализация абсолютно применим и будет понят любым специалистом без дополнительных пояснений Добавлено через 2 минуты и 25 секунд т.к. вы любитель словарей, вот ссылка http://en.wikipedia.org/wiki/Virtualizing
|
||||
|
|||||
| powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
С возвращением
Угу. Именно с этим значением я и знаком. Но я не думаю, что «abstraction of computer resources» имеет отношение к вызову виртуальных функций. Используется специальная таблица, нахождение адреса вызова находитсяопределённым способом и виртуализации каких-либо ресурсов не происходит имхо. Тут нужно вникнуть в то, как механизм работает ) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну раз Вы подходите с этой стороны(со стороны реализации, а не абстракции понятия), то интересно как по вашему мнению достигается «abstraction of computer resources» ? неужто обходится без специальной таблицы? Это сообщение отредактировал(а) mes - 20.11.2008, 12:17 |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |