Форум: "Основная";
Текущий архив: 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.036 c