|
32 / 32 / 1
Регистрация: 23.07.2009
Сообщений: 170
|
|
Таблица виртуальных функций13.04.2010, 20:40. Показов 14355. Ответов 13
Метки нет (Все метки)
объясните плиз кто разбирается..
есть абстрактный класс с двумя виртуальными функциями, от него наследуются два класса реализующие эти функции по своему.. и есть глобальная функция, которая принимает в параметры абстрактный класс, и вызывает виртуальные функции.. при использовании этой функции я подсовываю ей наследников, базового класса вобщем стандартная ситуация по страуструпу.. и вот вопрос как глобальная функция узнает какие ей вызывать функции.. у страуструпа что-то про таблицу виртуальных функций написано, но я не понял сколько их, где хранятся и что хранят.. если кто в курсе поподробнее и помедленее, я записую )
0
|
|
| 13.04.2010, 20:40 | |
|
Ответы с готовыми решениями:
13
Таблица виртуальных функций
Где хранится таблица виртуальных функций? |
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
||||||
| 13.04.2010, 21:29 | ||||||
|
Объект содержит указатель ( 4 байта ) на таблицу виртуальных функций.
0
|
||||||
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
| 13.04.2010, 21:32 | |
|
Quadro9, в таблице виртуальных функций хранятся указатели на реализации соответствующих функций. Объект же содержит указатель на данную таблицу.
1
|
|
|
32 / 32 / 1
Регистрация: 23.07.2009
Сообщений: 170
|
|
| 13.04.2010, 21:52 [ТС] | |
|
тоесть если брать мой пример, то все объекты наследников будут содержать указатели на таблицу..
таблица хранится у базового класса? в одном экземпляре? а как она примерно организованна? потомок1 -> функция1 потомок1 -> функция2 потомок2 -> функция1 потомок2 -> функция2 так?
0
|
|
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
|||||||||||
| 13.04.2010, 22:24 | |||||||||||
|
У каждого класса своя таблица. Один экземпляр для всего класса ( для всех объектов одного класса ).
посмотреть, что содержит переменная obj - объект класса MyClass.
2
|
|||||||||||
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
| 13.04.2010, 23:21 | |
|
Вот наилучшее применение виртуальных функций и там написано, много про это, и более простым языком, и так же помимо этого там еще много чего интересного.
https://www.cyberforum.ru/com-ole/thread85437.html Надеюсь тебе эта книга пригодится. Последнюю книгу тебе лучше не качать... Добавлено через 3 минуты Так же тебе может пригодится это для начала. абстрактный базовый класс Добавлено через 3 минуты Alex5: Ты прям как я ковырятель программер, я отладчиком тоже частенько пользуюсь.
1
|
|
|
32 / 32 / 1
Регистрация: 23.07.2009
Сообщений: 170
|
||||||
| 13.04.2010, 23:32 [ТС] | ||||||
|
Вобщем как я это понял..
таблицы имеет каждый класс и базовый и его предки, каждый свою.. и в моем примере функция func вызывает нужную функцию класса основываясь на индексе!! тоесть в теле функции я вызываю а.f(), и функция понимает что когда я вызову ее с реальным класом надо посмотреть таблицу этого реального класа и вызвать функцию с индексом [0] ! как то так ![]() с кодом и скриншотом понятнее может будет..
0
|
||||||
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
| 13.04.2010, 23:53 | |
|
А ответ на вопрос, прост.
Каждый созданный Объект имеет свою vtbl - таблицу. Грубо говоря используя указатель базового класса, мы получаем в распоряжение адрес объекта, а с ним и его таблицу функций. Полиморфизм трактуется так: один интерфейс множество реализаций. Интерфейсом можно назвать базовый абстрактный класс, а реализации это производные от него классы, имеющие реализации вирт функций. Через указатель базового класса, так же грубо говоря, мы можем выбирать реализацию: получать адреса объектов производных классов, а с ними и таблицы с реализациями. Надеюсь понятна общая философия зачем нужна прошивка иерархии таблицами. Такой полиморфизм позволяет изменять поведения программы в реальном времени путем перенаведения указателя базового класса с одного объекта на другой объект производного класса. Старался объяснить, может тебе более понятно стало.
1
|
|
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
|||||||
| 14.04.2010, 01:01 | |||||||
|
Каждый класс имеет свою ТВМ ( таблицу виртуальных методов ). Таблица одна для всего класса.
2
|
|||||||
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
||||
| 14.04.2010, 11:53 | ||||
я говорил в общих чертах, для более детального анализа есть книжки и прочее. Добавлено через 12 минут Quadro9: Если хочешь покопаться в нюансах тебе сюда: http://www.devdoc.ru/index.php... l_base.htm Добавлено через 6 минут
Добавлено через 1 минуту Таблица та общая но обращение к ней разных объектов уникальное. Добавлено через 10 минут Не по теме:
Добавлено через 3 минуты Alex5: Не мог бы объяснить что сие значит:
или ты хотел показать что у каждого объекта экземпляр полей данных свой, а таблица одна на всех.
1
|
||||
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
|||||||
| 14.04.2010, 16:03 | |||||||
полю "a.x", какие "a.y"
1
|
|||||||
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
||||||
| 14.04.2010, 16:17 | ||||||
|
В окне дизассемблера можно посмотреть, как вызывается виртуальная функция.
1
|
||||||
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
| 14.04.2010, 16:33 | |
|
Не по теме: Alex5: Тоже им пользуюсь. Добавлено через 9 минут Если у тебя VC++ 6.0 лучше поменяй его, поскорей, что бы сильно не привыкать к нему, просто эта версия уже морально устарела, да и некоторым стандартам C++ не соответствует. И компилятор работает на основании стандарта 98 года, сейчас актуален стандарт 2003. Проекты VC++ 6.0 не будут нормально совместимы с новыми средами разработки, все из-за устаревшего стандарта. Короче менять среду разработки все равно придется.
1
|
|
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
||||||||
| 14.04.2010, 17:05 | ||||||||
|
Не привыкать... Да, пожалуй уже привык ![]()
0
|
||||||||
| 14.04.2010, 17:05 | |
|
Помогаю со студенческими работами здесь
14
Механизм виртуальных функций Использование виртуальных функций
Вызов виртуальных функций Перегрузка виртуальных функций Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|