Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> виртуальны функции: преимущества на практике, докажите преимущества на примере 
V
    Опции темы
bomberman
Дата 14.11.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 4.4.2008
Где: Брест

Репутация: нет
Всего: нет




Привет!

1) Однажды на собеседовании задали вопрос: покажите на примере (напишите С++ код) и объясните в чем 
    преимущества и (когда без них практически не обойтись) применения виртуальных функций.

2) Я знаю, что виртуальные функии применяются в технологии COM и при создании плагинов
    Можно объяснить в общем, для чего именно они там используются, что без них не обойтись

3) В каком источнике можно найти обоснование того, что указатель базового неполиморфного класса
    ссылаясь на объект полиморфного производного класса  не вызовет виртуальный метод производного
    класса, т.е. не выполнится динамическое связывание

Большое спасибо!  
PM MAIL ICQ   Вверх
Alek86
Дата 14.11.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(bomberman @  14.11.2008,  13:22 Найти цитируемый пост)
 Можно объяснить в общем, для чего именно они там используются, что без них не обойтись

для бинарной совместимости dll и exe, к примеру
(вообще-то там использубтся не сами виртуальные функции, а то, что они хранятся в виде таблицы указателей на функции)

по сабжу - почитай в инете про полиморфизм
к примеру, тута


--------------------
user posted image    user posted image
PM MAIL   Вверх
J0ker
Дата 14.11.2008, 20:34 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Alek86 @  14.11.2008,  14:04 Найти цитируемый пост)
Цитата(bomberman @  14.11.2008)

 Можно объяснить в общем, для чего именно они там используются, что без них не обойтись


для бинарной совместимости dll и exe, к примеру
(вообще-то там использубтся не сами виртуальные функции, а то, что они хранятся в виде таблицы указателей на функции)

для бинарной совместимости применяют соглашения о вызове
в COM виртуализация применяется для работы с объектами посредством абстрактных интерфейсов

Это сообщение отредактировал(а) J0ker - 14.11.2008, 20:34


--------------------
user posted image
PM MAIL   Вверх
mes
Дата 14.11.2008, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(J0ker @  14.11.2008,  20:34 Найти цитируемый пост)
для бинарной совместимости применяют соглашения о вызов

Алек86 имел ввиду не сами виртуальные функции, а абстрактный класс.
На примере использования  в качестве интерфейса между двумя (возможно) бинарно не совместимыми кодами.

Добавлено через 1 минуту и 37 секунд
Цитата(J0ker @  14.11.2008,  20:34 Найти цитируемый пост)
в COM виртуализация применяется для работы с объектами посредством абстрактных интерфейсов

опять пол поста прочитал - и ответил,
а ниже оказывается уже естж такое . )



--------------------
PM MAIL WWW   Вверх
powerfox
Дата 15.11.2008, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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 @  14.11.2008,  21:34 Найти цитируемый пост)
в COM виртуализация применяется для работы с объектами посредством абстрактных интерфейсов

Виртуальная функций != виртуализация (во всяком случае я такого употребления слова не встречал).



--------------------
user posted image
PM WWW   Вверх
J0ker
Дата 15.11.2008, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(powerfox @  15.11.2008,  18:05 Найти цитируемый пост)
Виртуальная функций != виртуализация (во всяком случае я такого употребления слова не встречал).

ну ессесна !=
ибо первое - конкретное применение второго  smile 

Это сообщение отредактировал(а) J0ker - 15.11.2008, 18:31


--------------------
user posted image
PM MAIL   Вверх
powerfox
Дата 16.11.2008, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Цитата(J0ker @  15.11.2008,  19:30 Найти цитируемый пост)
ибо первое - конкретное применение второго  smile 

Да? ;)
http://ru.wikipedia.org/wiki/%D0%92%D0%B8%...%86%D0%B8%D1%8F



--------------------
user posted image
PM WWW   Вверх
J0ker
Дата 16.11.2008, 04:45 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(powerfox @ 16.11.2008,  00:48)
Цитата(J0ker @  15.11.2008,  19:30 Найти цитируемый пост)
ибо первое - конкретное применение второго  smile 

Да? ;)
http://ru.wikipedia.org/wiki/%D0%92%D0%B8%...%86%D0%B8%D1%8F

при чем тут, собстна, виртуализация в вычислениях?
если у вас плохо с английским - так и скажите


--------------------
user posted image
PM MAIL   Вверх
powerfox
Дата 16.11.2008, 15:39 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



J0ker, покажите мне, пожалуйста, где в литературе по ООП используется слово «виртуализация» в отношении виртуальных функций?




--------------------
user posted image
PM WWW   Вверх
mes
Дата 16.11.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(powerfox @  16.11.2008,  15:39 Найти цитируемый пост)
покажите мне, пожалуйста, где в литературе по ООП используется слово «виртуализация» в отношении виртуальных функций?

вот к примеру (первое попавшее под руку)
Цитата


3.5.1 Виртуальные функции

В ООП полиморфизм достигается не только описанным выше механизмом наследования и перегрузки методов родителя, но и виртуализацией, позволяющей родительским функциям обращаться к функциям потомков. Полиморфизм реализуется через архитектуру класса, но полиморфными могут быть только функции-члены.

http://www.helloworld.ru/texts/comp/lang/b...r/builder/3.htm

Это сообщение отредактировал(а) mes - 16.11.2008, 16:25


--------------------
PM MAIL WWW   Вверх
powerfox
Дата 16.11.2008, 17:28 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Цитата(mes @  16.11.2008,  17:25 Найти цитируемый пост)
http://www.helloworld.ru/texts/comp/lang/b...r/builder/3.htm

Я имел в виду нормальные источники, а не левые ресурсы. Например, стандарт С++, документацию по g++ или «ЯП С++» Стауструпа (у меня есть только на русском). Ни там, ни там слово виртуализация не встречается. А в стандарте находится вся необходимая информация для разработки компилятора. Если обратиться к гуглу, то можно найти несколько страниц, где используют слово «виртуализация», но правильнее (точнее правильно) было бы использовать термин «динамический полиморфизм».

Это сообщение отредактировал(а) powerfox - 16.11.2008, 17:28


--------------------
user posted image
PM WWW   Вверх
mes
Дата 16.11.2008, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



динамический полиморфизм и виртуализация и виртуальные функции это не одно и то же. Виртуальные функции это один из методов реализации виртуализации, на основе которой и работает динамический полиморфизм.



--------------------
PM MAIL WWW   Вверх
J0ker
Дата 16.11.2008, 19:20 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14




Модератор: Сообщение скрыто.



--------------------
user posted image
PM MAIL   Вверх
powerfox
Дата 16.11.2008, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



J0ker, расслабьтесь и давайте без матов. Всё равно речь идёт об одном и том же. 
Я высказал своё мнение, вы своё.

Цитата(mes @  16.11.2008,  20:00 Найти цитируемый пост)
динамический полиморфизм и виртуализация и виртуальные функции это не одно и то же. Виртуальные функции это один из методов реализации виртуализации, на основе которой и работает динамический полиморфизм.

Я встречал выражение «dynamic despatch».  Таблицу виртуальных методов так же иногда называют таблицей диспетчеризации. Хоть это и редко употребляется (и в основном в отношении управления процессами), но с термином «диспетчеризация» ещё можно согласиться.


--------------------
user posted image
PM WWW   Вверх
J0ker
Дата 19.11.2008, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(powerfox @  16.11.2008,  21:55 Найти цитируемый пост)
J0ker, расслабьтесь и давайте без матов. Всё равно речь идёт об одном и том же. 
Я высказал своё мнение, вы своё.

меня немного побанили  smile 
вопрос, собственно, в филологии
я ответственно заявляю, что в данном контексте термин виртуализация абсолютно применим и будет понят любым специалистом без дополнительных пояснений

Добавлено через 2 минуты и 25 секунд
т.к. вы любитель словарей, вот ссылка
http://en.wikipedia.org/wiki/Virtualizing
Цитата

In computing, virtualization is a broad term that refers to the abstraction of computer resources



--------------------
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0601 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.