Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.02.2009, 00:40
demoston demoston вне форума
Прохожий
 
Регистрация: 28.02.2009
Сообщения: 1
Репутация: 10
По умолчанию вопрос по таблице виртуальных методов

Приветствую!
Подскажите, пожалуйста, правильно ли я понимаю, что в следующем коде:
Код:
Type
  TPerson = class(TObject)
  public
    constructor Create();
    function GetInfo(): WideString; virtual;
  end;

 TChild = class(TPerson)
 public
  constructor Create();
  function GetInfo(): WideString; virtual;
 end;

для класса TChild будет создана виртуальная таблица методов, в которой будут храниться адрес как метод GetInfo() класса TPerson, так и адрес метода GetInfo() класса TChild? При этом, в следующем коде:

Код:
var
  mas: array [0..4] of TPerson;
  i: Word;
begin

  for i := 0 to 4 do
    if i mod 2 > 0 then
      mas[i] := TPerson.Create()
    else
      mas[i] := TChild.Create();

  for i := 0 to 4 do
    ShowMessage('i=' + IntToStr(i) + ', ' + mas[i].GetInfo());

при вызове метода mas[i].GetInfo() на основе формального типа TPerson в объявлении массива будет определено смещение в VMT для вызова нужного метода, в результате, во всех четырех случаях будет вызван метод GetInfo() класса TPerson, потому как в VMT замещения его на аналогичный метод класса TChild не осуществлялось (как если бы в наследнике вместо virtual стояла инструкция override). Или я в чем-то ошибаюсь в своих рассуждениях?

Спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter