![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Например есть класс TClass1, от него образован потомок TClass2, создан экземпляр TClass2 - Class2. Это означает что TClass2 унаследовал все поля и методы родителя. Что находиться по адресу Class2? Непонятно что имееться ввиду когда говорят что вызываеться метод родителя перезаписанный в потомке. Другими словами, где находиться код метода родителя который необходимо вызвать? Создан-то только объект класса TClass2? Или ссылка Class2 хранит не только методы и поля специфические для TClass2 но и для всех предшественников?
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
в ООП override-ом указываются методы(виртуальные или динамические), которые есть у предка и которые перекрываются с сохранением доступа к родительскому методу посредством использования конструкции "inherited".
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Это мне ясно. Неясно где находиться код родительского метода..
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: нет Всего: 173 |
Экземпляр в любом случае не хранит код метода — он один для всех экземпляров класса.
Если метод не виртуальный, то компилятор статически определяет, какой метод вызвать в данном месте. Для корректного вызова виртуальных методов каждый экземпляр класса хранит указатель на таблицу виртуальных методов. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
А что же тогда храниться по адресу Class2? Только поля? А где тогда методы?
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: нет Всего: 173 |
Методы с точки зрения представления в рантайме ничем не отличаются от обычных функций.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Ну так где же располагаеться код метода родителя? Мы же переопределяем метод в потомке. Откуда береться код родителя?
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: нет Всего: 173 |
Код метода родителя остаётся там, где был и откуда он вызывался бы, создай мы непосредственно экземпляр класса-родителя. (Это не надо понимать так, что при вызове создаётся таковой экземпляр.)
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Значит, насколько я понимаю, нужно просто знать что "Он есть"? Ну это же ерунда, как тогда писать эффективные программы?
Ксавье Пачеко:
Воспринимаеться из такого - 0. Неудивительно что потом во всем виноваты программисты. Ну так что, никто так и не знает где находиться код метода родителя? Для меня есть крайне странным существование кода о котором я незнаю. Это сообщение отредактировал(а) S.A.G. - 6.4.2007, 23:53 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
S.A.G., Модератор: Название темы должно отражать ее суть!
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |