Таблица Виртуальных Методов - vtable

  Рет қаралды 16,136

Volodya Mozhenkov

Volodya Mozhenkov

Күн бұрын

Пікірлер: 32
@ИльяАпролов
@ИльяАпролов 5 жыл бұрын
Спасибо за видео, Кхал Дрого
@maxlich9139
@maxlich9139 7 жыл бұрын
Интересно смотреть, как Иисус рассказывает про программирование (надо было курс называть "Божественное Программирование"))) (сарказм). Надеюсь, автор не обидится, рассказывает он, конечно, хорошо и очень доходчиво (мне кажется, что у него есть дар учителя). Но выглядит он (и всё это вместе) именно так)
@testtest-cf4mg
@testtest-cf4mg 7 жыл бұрын
Он помогает слепым новичкам достичь того что уже достигли обычные программисты, позволяя увидеть тем самым новичкам своими глазами разницу и пользу от ранней и поздней типизации. Пустые строки кода вмиг станут наполненными и нести какой-то логический смысл благодаря приобретенному дару. А если серьезней... Хотел лишь выразить благодарность автору за доступное объяснение))
@Magomedrasul7
@Magomedrasul7 2 жыл бұрын
Самое понятное видео из всего что я видел по vtable !)
@ruslanhamolia6409
@ruslanhamolia6409 2 жыл бұрын
Спасибо Вам, долго ломал голову, не мог понять из-за излишней глубины, но Вы всё четко по полочкам разложили. Огромное спасибо
@Ланс-м1в
@Ланс-м1в 4 жыл бұрын
Спасибо. Для новичков то, что нужно.
@аноним-х3ш
@аноним-х3ш 2 жыл бұрын
Это просто замечательно! Хотелось бы больше уроков по C++
@Puninvv
@Puninvv 9 жыл бұрын
Владимир, у Вас замечательно получается снимать видеоуроки! Желаю Вам успехов!
@valekprometey
@valekprometey 2 жыл бұрын
Спасибо!
@ASFlasher
@ASFlasher 9 жыл бұрын
Интересные уроки, но есть не точности. Объект не хранит информацию о методах. В нем хранятся только поля. Можно проверить создав класс с кучей методов и посмотреть как его объект в памяти представлен или сделать sizeof. Если в классе нет ни одного поля то размер объекта будет не нулевой, например 1 байт. Если есть хоть одно поле, то размер объекта в не зависимости от количества функций будет равен этому полю. Если полей несколько, то там уже из-за выравнивания размер может варьировать. Если класс имеет виртуальные функции то еще добавляется указатель на vtable.В любом случае подписался, много интересного на канале :)
@VladimirMozhenkov
@VladimirMozhenkov 9 жыл бұрын
+ASFlasher О каком языке программирования вы говорите? О каком компиляторе этого языка? В C++, например, (как я упонянал в этом видео) vtable - это только один из спосовоб реализации виртуальных методов, и реализация виртуальных таблиц тоже решается самим компилятором.
@ASFlasher
@ASFlasher 9 жыл бұрын
+Vladimir Mozhenkov насчет реализации полиморфизма согласен, есть разные способы, но я не про это. Хранение функций в объекте класса не эффективно, т.к. в таком случае происходил бы большой объем дублирования информации. Намного логичней сделать так как сейчас реализовано во всех мне известных языках. Для класса функция существует в единичном экземпляре, и принимает не явно указатель на объект с которым работает. В С++ через указатель this.
@VladimirMozhenkov
@VladimirMozhenkov 9 жыл бұрын
+ASFlasher Я с вами согласен. Я просто про то, что это не то, о чём было это видео. Вы правы, обычные методы не хранятся в каждом объекте индивидуально (по крайней мере не хранятся так ни в одном из известных мне компиляторах).
@aleksanderaksionau8555
@aleksanderaksionau8555 6 жыл бұрын
и что получается это статический объект,...и обращение к одной виртуально странице просходит?
@ВиталийАлешко-ц4к
@ВиталийАлешко-ц4к 2 жыл бұрын
Можно попросить объяснение работы try/catch? Не могу найти понятную информацию о том, как C++ делает прерывание стека вызовов, которое непонятно как повторить в языке C. За VTable спасибо, полиморфизм теперь стал ещё более понятным)
@Ivan-qb7kc
@Ivan-qb7kc 7 жыл бұрын
Объясните, пожалуйста, почему нельзя создавать виртуальные шаблонные функции?
@shackoor
@shackoor 3 жыл бұрын
большая ошибка подменить A на B прямо при старте)))
@ВладыкаВселенной-х8т
@ВладыкаВселенной-х8т 3 жыл бұрын
Если в классах потомках не будет функций с такими же именами как и у предков то таблица виртуальных функций не будет использоваться компилятором, так что-ли?
@nmg_prm
@nmg_prm 3 жыл бұрын
Все методы наследуются , если паблик. Виртуал для другого
@АлександрБ-у8у
@АлександрБ-у8у 5 жыл бұрын
Ни**я еще не понял, но очень интересно!
@MrAmmid
@MrAmmid 8 жыл бұрын
Остался вопрос: Как при вызове методов компилятор понимает, какую VTABLE нужно использовать? Ему нужно просмотреть все VTABLE?
@antonmyronenko4597
@antonmyronenko4597 7 жыл бұрын
MrAmmid виртуальная таблица создается для каждого класса(содержащего вирт функции) в иерархии, а каждый объект, при создании, содержит "скрытый" указатель ссылающийся на вирт табл своего класса. Это все упрощенно. Немного усложняя, если в дочернем классе не переопределена вирт функция базового класса, то вирт таблица этого класса для этого метода просто будет хранить указатель на соответствующую функцию базового класса ( это не фиксировано и зависит от реализации)
@ArthurPozhidayev
@ArthurPozhidayev 7 жыл бұрын
При использовании ссылки/указателя базового класса на производный, т.е. (A* p = new B;) можно вызвать у него переопределенный метод (p->f();), проблема здесь одна, компилятор должен заменить эту строку на конкретный адрес вызываемого метода, а таких методов 2. Поэтому подставляется адрес метода из таблицы, (p->pvtb->f();) Да, каждый объект ссылается на свою таблицу, но их внутреннее построение гарантирует одинаковое смещение для переопределенных методов. Т.е. если в памяти A::f() храниться по адресу 10, а B::f() - 20 (утрировано), то во всех таблицах ссылки на эти методы будут располагаться с 8-го байта (сначала в vtable идет тип для RTTI, потом указатель на offset-to-top для множественного наследования, а затем наши методы). И на этапе компиляции p->f() примет вид p->pvtb->8, напротив этой 8-ки в таблице адрес нужного нам метода, в нашем случае 20, так процессор перескочит на 20 байт и продолжит выполнение. Надеюсь не утомил ответом на годовалый вопрос (мало ли кому понадобится)
@GorgeousPuree
@GorgeousPuree 6 жыл бұрын
Я не понимаю, это слишком сложно
@olivemaster3272
@olivemaster3272 8 жыл бұрын
Блин как надоели учителя, которые сами не фига не знают. Нахватаются по верхам и начинают вещать всякое г.....
@user-aleks-Al-1
@user-aleks-Al-1 7 жыл бұрын
Ну так расскажите, в чем ошибки
@olivemaster3272
@olivemaster3272 7 жыл бұрын
Грубейшие ошибки: 1) Объект класса не хранит в себе непосредственно информацию об конкретной виртуальной функции. Даже в самом начале создания объекта! (Ошибка на 5:35 минуте ролика). 2) VTBL не удаляет никакой информации из объекта класса! (Дикий бред на 6:03 минуте). 3) Объект класса не содержит в себе VTBL! (Ламмерская сказка 6:29 минута). Есть еще по мелочи ...
@TheDiscoLux
@TheDiscoLux 7 жыл бұрын
лет 10 назад занимался построением своего языка, пересмотрел кучу исходников компиляторов и помню что данные базового класса вплотную лежали с данными производного. (предполагаю по sizeof без выравнивания можно посмотреть) а функции лежали в других местах. да вообще может все черт ногу сломит как компилятор расположить при оптимизации. тут смысл в видео просто для утрированого понимания как работает. может даже при каком-то большем кол-ве функций в объекте вообще хэш функцией искать .хз. как к примеру с большим оператором switch.
@aleksandrkravtsov8727
@aleksandrkravtsov8727 5 жыл бұрын
блэ) ну нафига путать то? всю жизнь все рисуют A как родитель B как наследник, сиди теперь каждый раз когда видишь B думай что это не то что всегда а наоборот)
@knzsoft
@knzsoft 4 жыл бұрын
Посмотрите UML. Автор использует нотацию UML. Можно считать UML неким стандартом де-факто для рисования классовых диаграмм. Привыкайте, а то будут проблемы на собеседованиях и в работе.
@aleksandrkravtsov8727
@aleksandrkravtsov8727 4 жыл бұрын
@@knzsoft спасибо за ответ не в тему вопроса)
@arcticshine3741
@arcticshine3741 5 жыл бұрын
Плохо объянил, все намного проще можно подать
Когда ООП поможет вам?
8:48
Volodya Mozhenkov
Рет қаралды 12 М.
Фабричный метод
15:48
Volodya Mozhenkov
Рет қаралды 60 М.
У вас там какие таланты ?😂
00:19
Карина Хафизова
Рет қаралды 24 МЛН
The IMPOSSIBLE Puzzle..
00:55
Stokes Twins
Рет қаралды 107 МЛН
ROSÉ & Bruno Mars - APT. (Official Music Video)
02:54
ROSÉ
Рет қаралды 327 МЛН
МЕНЯ УКУСИЛ ПАУК #shorts
00:23
Паша Осадчий
Рет қаралды 1,7 МЛН
С++ 12. RTTI, dynamic_cast, vtables.
1:30:35
Лекторий ФПМИ
Рет қаралды 7 М.
vTables for Game Hacking & VMT Hooking
10:30
Guided Hacking
Рет қаралды 12 М.
Интерфейс в ООП
13:46
Volodya Mozhenkov
Рет қаралды 44 М.
Реальные и виртуальные таблицы 1С - Урок 7
42:16
ТЕХПОДДЕРЖКА
Рет қаралды 27 М.
Наследование
12:31
Volodya Mozhenkov
Рет қаралды 30 М.
C++ vPointers and vTables
14:00
Jamie King
Рет қаралды 71 М.
Хеш Карта
11:54
Volodya Mozhenkov
Рет қаралды 29 М.
У вас там какие таланты ?😂
00:19
Карина Хафизова
Рет қаралды 24 МЛН