Ранняя привязка для чайников [закрыто] ⇐ C++
Ранняя привязка для чайников [закрыто]
Недавно мне хотелось понять виртуальные таблицы, раннее и позднее связывание методов в контексте ООП.
Но все объяснения, которые я нашел в книгах, видео, постах, были скорее «черными ящиками», как бы их так называть. Все, что я нашел, это очевидные примеры кода типа «Базовый против производного» и только упоминание о vtable, но даже не было подробного объяснения, кроме нашего коллеги vpointer, который тайно существует. Я просто не нашел в Интернете никакой информации о том, как эти протоколы соответствуют времени компиляции или времени выполнения.
Есть ли в этих протоколах какой-то четкий алгоритм? Такое, что; когда у нас есть A* a = new B() и выполняется a.foo(), программа проверяет, находится ли foo в виртуальной таблице A, а затем, если это так, она вызывает foo из виртуальной таблицы B. Но если есть раннее связывание, мы звоним из A....
Не существует четкого пошагового процесса того, как эти вещи сочетаются друг с другом, нет четкого рецепта того, как ведет себя программа, мы просто переходим от компиляции к среде выполнения, просто прекрасно все зная, без каких-либо четких объяснений.
Это нормально или я только сейчас начинаю понимать, что программирование — это сложно и ничего не будет понятно?
Я озадачен тем, как здесь есть люди, знающие свое дело, когда информацию в Интернете найти нелегко.
Мне очень хочется изучить этот материал до мозга костей, но четкого пути нет. Есть ли у кого-нибудь хороший источник, позволяющий понять эту внутреннюю работу?
Недавно мне хотелось понять виртуальные таблицы, раннее и позднее связывание методов в контексте ООП.
Но все объяснения, которые я нашел в книгах, видео, постах, были скорее «черными ящиками», как бы их так называть. Все, что я нашел, это очевидные примеры кода типа «Базовый против производного» и только упоминание о vtable, но даже не было подробного объяснения, кроме нашего коллеги vpointer, который тайно существует. Я просто не нашел в Интернете никакой информации о том, как эти протоколы соответствуют времени компиляции или времени выполнения.
Есть ли в этих протоколах какой-то четкий алгоритм? Такое, что; когда у нас есть A* a = new B() и выполняется a.foo(), программа проверяет, находится ли foo в виртуальной таблице A, а затем, если это так, она вызывает foo из виртуальной таблицы B. Но если есть раннее связывание, мы звоним из A....
Не существует четкого пошагового процесса того, как эти вещи сочетаются друг с другом, нет четкого рецепта того, как ведет себя программа, мы просто переходим от компиляции к среде выполнения, просто прекрасно все зная, без каких-либо четких объяснений.
Это нормально или я только сейчас начинаю понимать, что программирование — это сложно и ничего не будет понятно?
Я озадачен тем, как здесь есть люди, знающие свое дело, когда информацию в Интернете найти нелегко.
Мне очень хочется изучить этот материал до мозга костей, но четкого пути нет. Есть ли у кого-нибудь хороший источник, позволяющий понять эту внутреннюю работу?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Есть ли что-нибудь вроде книг «Для чайников» для изучения AWK? [закрыто]
Anonymous » » в форуме Linux - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-