Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Вниз

Знатокам ООП...   Найти похожие ветки 

 
Labert ©   (2004-08-18 12:40) [0]

Предположим, есть такие объявления:

TA = class
procedure PP; virtual;
end;

TB = class(TA)
procedure PP;
end;

Обращаю ваше внимание, что я намеренно опустил слово OVERRIDE в заголовке метода TB.PP
Т.е. в этом случае, как написано в документации
"...the new declaration merely hides the inherited one without overriding it..."

при этом:

var
a : TA;
begin
a := TB.create;
a.PP;   //вызывается TA.PP

Внимание вопрос:
Будет ли в VMT класса TB строка для метода PP?
Если да, то она указывает на TA.PP?


 
Digitman ©   (2004-08-18 12:42) [1]


> Будет ли в VMT класса TB строка для метода PP?


откуда она там возьмется ? если TB.PP - статический метод ?


 
Labert ©   (2004-08-18 12:53) [2]

Похоже, никто не знает...

>Digitman
Ну ладно, тогда такой вопрос:

Какой код Delphi скомпилирует для вызова a.PP ?


 
Digitman ©   (2004-08-18 12:59) [3]


> Labert ©   (18.08.04 12:53) [2]


самому-то посмотреть - не судьба ?


 
DK ©   (2004-08-18 13:05) [4]

попробуй reintroduce; overload;


 
Labert ©   (2004-08-18 13:15) [5]

>DK ©   (18.08.04 13:05) [4]
причем тут overload вообще?

>Digitman ©   (18.08.04 12:59) [3]
А где я посмотрю?
Сами-то не знаете?


 
DK ©   (2004-08-18 13:19) [6]

С этими дериктивами и компелятору спокойнее
"...the new declaration merely hides the inherited one without overriding it..." и новый метод, а не TA.PP будет в VMT!


 
jack128 ©   (2004-08-18 13:20) [7]


> А где я посмотрю?
Alt+Ctrl+C

> Сами-то не знаете?
Хе. Попытка развести Digitman"a на "слабо"?  Ну - ну..


 
Labert ©   (2004-08-18 13:25) [8]

Ладно, повторюсь:

Будет ли в VMT класса TB строка для метода PP?
Какой код Delphi скомпилирует для вызова a.PP ?

Если кто знает, то помогите мне, убогому, пожалуйста.

Если не знаете, то просьба ничего не писать


 
Digitman ©   (2004-08-18 13:27) [9]


> Labert ©   (18.08.04 13:15) [5]


> где я посмотрю?
> Сами-то не знаете?


дурочку только не гони !
у тебя перед носом меню View -> Debug Windows.. -> CPU

ставь брейкпойнт на строке с вызовом метода a.PP , стартуй приложение , лови брейкпойнт, открывай  CPU-окно и изучай сабж !


 
Юрий Зотов ©   (2004-08-18 13:29) [10]

> Labert

Еще раз: TB.PP - метод статический. Откуда в таблице виртуальных методов (VMT) возьмется ссылка на статический метод? К тому же этот метод - public, то есть он не войдет и в DMT.

> Какой код Delphi скомпилирует для вызова a.PP
Вы же сами написали - код вызова виртуального метода TA.PP

> А где я посмотрю?
В окне CPU, естественно, где ж еще? Ставьте BreakPoint, жмите Ctrl+Alt+C и смотрите на здоровье.

> Сами-то не знаете?
Вы считаете, что кто-нибудь станет заучивать наизусть, какие конкретно коды генерит компилятор, если их всегда можно посмотреть в окне CPU?

==============================

Причина всего этого очень проста - пропуск override разрывает цепочку наследования метода. О чем и сообщает компилятор.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.057 c
1-1092735398
STARfish
2004-08-17 13:36
2004.09.05
Есть ли у Скроллбокса событие "нажатие по полосе прокрутки"?


14-1092720699
Holy
2004-08-17 09:31
2004.09.05
Локальная сеть...


14-1092731251
jack128
2004-08-17 12:27
2004.09.05
Убийство за оскорбление в чате..


1-1093086372
masqito
2004-08-21 15:06
2004.09.05
Помогите с построением компонентов.


1-1092865954
Endi
2004-08-19 01:52
2004.09.05
Запись и чтение файла.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский