Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2008, 18:08   #51
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
там чистые виртуальные функции. если их не обьявить во всех порожденных классах. то компилятор ругаться будет.
Компилятор будет ругаться там потому, что если не определить чисто виртуальные ф-ии в производных классах, то некоторые ячейки таблицы виртуальных функций будут пустыми, а это создает угрозу безопасности, чего допустить нельзя.
still_alive вне форума Ответить с цитированием
Старый 28.09.2008, 18:24   #52
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
1)Разве только для Cat? Но ведь Cat это саб класс Pet, значит туда войдут и переменные класса Pet?
Естественно войдут. Классы Pet и Cat никак не пересекаются между собой, они всего лишь связаны отношением наследования.

Цитата:
2)У класса Cat нет виртуальных функций, они есть в Pet.
Есть. Виртуальные ф-ции класса-предка автоматом становятся виртуальными ф-ями всех его классов-потомков.

Цитата:
3)А вот тут по подробнее плиз, как это?
Что именно? Ассемблерный код я приводить не буду, на словах. Есть адрес таблицы виртуальных ф-ций. Есть смещение ф-ии относительно начала таблицы. Определяем адрес ячейки таблицы. Там лежит адрес ф-ции, которая нам нужна. Ее и вызываем.
still_alive вне форума Ответить с цитированием
Старый 28.09.2008, 18:31   #53
Scratch
Пользователь
 
Аватар для Scratch
 
Регистрация: 25.09.2008
Сообщений: 40
По умолчанию

Цитата:
Сообщение от still_alive Посмотреть сообщение
Естественно войдут. Классы Pet и Cat никак не пересекаются между собой, они всего лишь связаны отношением наследования.


Есть. Виртуальные ф-ции класса-предка автоматом становятся виртуальными ф-ями всех его классов-потомков.


Что именно? Ассемблерный код я приводить не буду, на словах. Есть адрес таблицы виртуальных ф-ций. Есть смещение ф-ии относительно начала таблицы. Определяем адрес ячейки таблицы. Там лежит адрес ф-ции, которая нам нужна. Ее и вызываем.
Что такое таблица виртуальных функций и что такое смещение ф-ии?
Scratch вне форума Ответить с цитированием
Старый 28.09.2008, 18:46   #54
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Таблица виртуальных ф-ций - это по сути массив, каждый элемент которого содержит адрес одной из виртуальных функций. Смещение - это число, равное произведению индекса на размер элемента массива.
still_alive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
П Р О С Т Е Й Ш И Й пример 3D aesoem Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 16.07.2008 16:54
Пример из учебника valerij Microsoft Office Excel 11 20.06.2008 15:43
Пример патчинга Д'якон Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 17.02.2008 19:27
пример парсинга Stanislav Общие вопросы Delphi 4 14.01.2008 03:48