|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.07.2013, 07:52 | #1 |
Пользователь
Регистрация: 10.12.2012
Сообщений: 17
|
Вопрос по виртуальным функциям
Познакомившись с понятием таблиц виртуальных функций, не могу понять следующую простую вещь. Пусть имеем следующий примитивный код:
Код:
Код:
Но откуда указателю pb удается вызвать Код:
Последний раз редактировалось I_I_I; 30.07.2013 в 08:46. |
30.07.2013, 08:30 | #2 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
<убрал ошибочные данные>
A:rint() черт... хочу тег для принудительного игнорирования смайликов внутри него не может быть вызван в принцыпе, поскольку этой функции не существует. Кроме того, через Classname::FunctionName() можно вызвать только статические функции. типа такой: Код:
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс Последний раз редактировалось ROD; 30.07.2013 в 08:52. |
30.07.2013, 08:44 | #3 | |||
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
Цитата:
Цитата:
Цитата:
Благодарить в репутацию. Проклинать — туда же
Последний раз редактировалось Luuzuk; 30.07.2013 в 08:47. |
|||
30.07.2013, 08:50 | #4 | |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Цитата:
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
|
30.07.2013, 10:21 | #5 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
Потому, что производный класс "работает как" базовый. Отсюда, Вы,через указатель на производный класс вызываете виртуальный метод print() из области видимости класса A.
Последний раз редактировалось Igor95; 30.07.2013 в 10:56. |
30.07.2013, 10:28 | #6 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
В данном случае получим две таблицы виртуальных функций:
A 0 A:rint() и B 0 B:rint() Последний раз редактировалось Igor95; 30.07.2013 в 10:36. |
30.07.2013, 10:36 | #7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,493
|
pb->A:rint() - это вообще не виртуальный вызов, адрес определяется на этапе компиляции.
|
30.07.2013, 10:38 | #8 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,493
|
|
30.07.2013, 10:43 | #9 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
|
30.07.2013, 10:54 | #10 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
Код:
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по функциям | miragex | Общие вопросы C/C++ | 5 | 06.01.2013 00:13 |
C++ Вопрос по виртуальным методам | Selestis | Помощь студентам | 5 | 09.09.2011 18:18 |
вопрос по функциям . | Goratics | Общие вопросы C/C++ | 5 | 17.07.2011 12:42 |
Вопрос по функциям | Antowka | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 08.12.2008 22:45 |
глупый вопрос по функциям | steck | Общие вопросы Delphi | 2 | 17.06.2007 15:40 |