![]() |
|
|
![]()
|
|
| pms |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.2.2006 Репутация: нет Всего: нет |
А скажите, пожалуйста, кто знает, почему CWinApp::Run объявлена как virtual. И где находится реализация этой функции?
|
|||
|
||||
| SergeCpp |
|
||||||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 5 Всего: 124 |
Виртуальная она для того, чтобы Вы могли её при желании переопределить в производном классе.
APPCORE.CPP
THRDCORE.CPP
Пример переопределения
Это сообщение отредактировал(а) SergeCpp - 23.6.2006, 08:58 |
||||||
|
|||||||
| pms |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.2.2006 Репутация: нет Всего: нет |
Благодарю за ответ. Но вот еще, что не совсем понятно. Почему нельзя добраться до реализации этой функции обычным путем, т.е. по цепочке предок->потомок. Вот что получается:
MyProgram.h
<Go To Declaration of CWinApp> AFXWIN.H
Т.е. получается что она изначально объявляется в CWinThread как virtual, наследуется в CWinApp снова без реализации, далее в CMyProgramApp, но и здесь ее реализации нет. Что не верно в моих рассуждениях? |
||||
|
|||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 5 Всего: 124 |
Реализация представлена Вам в первом моём ответе...
Первое окно с кодом — это реализация CWinApp::Run() Второе окно с кодом — это реализация CWinThread::Run() virtual member function pure virtual function Это сообщение отредактировал(а) SergeCpp - 30.6.2006, 10:47 |
|||
|
||||
| pms |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.2.2006 Репутация: нет Всего: нет |
Да я понял, что это реализация. Но я хочу узнать как компилятор "узнает", что это есть реализация этой функции? Прошу прощения за недостаточную внятность вопросов...
|
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 5 Всего: 124 |
С указателем на объект связана таблица vtable, где находятся указатели на виртуальные функции.
Узнаёт не компилятор. Во время выполнения производится переход по этому указателю. Это вкратце. |
|||
|
||||
| pms |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.2.2006 Репутация: нет Всего: нет |
Спасибо. Кстати, а где вообще происходит вызов этой функции? Или может Вы скажете где подробнее можно об этом прочесть?
|
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 5 Всего: 124 |
The Design and Evolution of C++
Вот тут есть несколько прекрасных книг Ну, и это... Это сообщение отредактировал(а) SergeCpp - 30.6.2006, 13:16 |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Книга Круглински тебе поможет. Ссылки на нее уже давали -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |