DP Delphi / Pascal  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Наследование и виртуальные методы

Этот тест проверяет не память на названия, а способность разбирать код, видеть границы механизма и выбирать исправление, которое не ломает соседние сценарии. Внутри 20 вопросов, из них 12 с фрагментами Object Pascal. Отдельные результаты показываются по разделам: «Виртуальные методы и override», «Абстрактные методы», «Вызов inherited» и «Полиморфизм».

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 55 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 1 из 20
В `VirtualDispatch` сначала встречается `procedure Print; override;`, а затем `try X.Print; finally X.Free; end;`. Какой вывод можно сделать только после чтения обеих строк?
PascalDelphi / Pascal · Виртуальные методы и override
// Отделите правило языка от удачного запуска VirtualDispatch.
program VirtualDispatch;
{$APPTYPE CONSOLE}
type
  TBase = class
    procedure Print; virtual;
  end;
  TChild = class(TBase)
    procedure Print; override;
  end;
procedure TBase.Print;
begin Writeln('base'); end;
procedure TChild.Print;
begin Writeln('child'); end;
var
  X: TBase;
begin
  X := TChild.Create;
  try X.Print; finally X.Free; end;
end.
Вопрос 2 из 20
Обычный пример по теме «Абстрактные методы» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник?
Вопрос 3 из 20
Две реализации темы «Вызов inherited» совпадают на обычном примере. Какое различие всё же меняет их договор?
Вопрос 4 из 20
В практическом сценарии по теме «Полиморфизм» меняются входные данные и порядок действий. Какой вывод остаётся корректным?
Вопрос 5 из 20
Потомок объявляет метод с той же сигнатурой, что и унаследованный `virtual`-метод, но без `override`. Какое поведение обязано сохраниться после замены реализации?
Вопрос 6 из 20
Обычный пример по теме «Абстрактные методы» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Рассмотрите вариант, где меняется состояние, но внешний интерфейс остаётся прежним.
Вопрос 7 из 20
Реализацию темы «Вызов inherited» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться?
Вопрос 8 из 20
В теме «Полиморфизм» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 9 из 20
Какой сценарий по теме «Виртуальные методы и override» отличит исправную реализацию от версии со скрытым дефектом?
Вопрос 10 из 20
Правка по теме «Абстрактные методы» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 11 из 20
В теме «Вызов inherited» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 12 из 20
Какой граничный результат следует ожидать в `Polymorphism`, когда после `Shape := TSquare.Create;` выполняется `finally Shape.Free; end;`?
PascalDelphi / Pascal · Полиморфизм
// Определите реальную гарантию в Polymorphism.
program Polymorphism;
{$APPTYPE CONSOLE}
type
  TShape = class
    function Area: Double; virtual; abstract;
  end;
  TSquare = class(TShape)
    Side: Double;
    function Area: Double; override;
  end;
function TSquare.Area: Double;
begin Result := Side * Side; end;
var
  Shape: TShape;
begin
  Shape := TSquare.Create;
  try
    TSquare(Shape).Side := 3;
    Writeln(Shape.Area:0:1);
  finally Shape.Free; end;
end.
Вопрос 13 из 20
Модуль с базовой ссылкой передают другой команде. Какой договор нужно зафиксировать для объявления в потомке с той же сигнатурой, но без `override`?
Вопрос 14 из 20
Для темы «Абстрактные методы» обычный путь и граничный путь дают разные риски. Какой вывод учитывает оба, не подменяя один другим?
Вопрос 15 из 20
Какое наблюдение должен зафиксировать тест именно для последовательности `begin Writeln('base save'); end;` → `inherited;` в `InheritedOrder`?
PascalDelphi / Pascal · Вызов inherited
// Отделите правило языка от удачного запуска InheritedOrder.
program InheritedOrder;
{$APPTYPE CONSOLE}
type
  TBase = class
    procedure Save; virtual;
  end;
  TChild = class(TBase)
    procedure Save; override;
  end;
procedure TBase.Save;
begin Writeln('base save'); end;
procedure TChild.Save;
begin
  Writeln('validate');
  inherited;
  Writeln('notify');
end;
begin end.
Вопрос 16 из 20
Какой сценарий по теме «Полиморфизм» отличит исправную реализацию от версии со скрытым дефектом?
Вопрос 17 из 20
В теме «Виртуальные методы и override» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 18 из 20
В `AbstractDemo` строка `function Format(N: Integer): string; virtual; abstract;` создаёт условие для последующей `Result := IntToHex(N, 1);`. Какой вывод подтверждает этот фрагмент?
PascalDelphi / Pascal · Абстрактные методы
// Проследите фактическое поведение AbstractDemo.
program AbstractDemo;
{$APPTYPE CONSOLE}
uses System.SysUtils;
type
  TFormatter = class abstract
    function Format(N: Integer): string; virtual; abstract;
  end;
  THexFormatter = class(TFormatter)
    function Format(N: Integer): string; override;
  end;
function THexFormatter.Format(N: Integer): string;
begin
  Result := IntToHex(N, 1);
end;
begin end.
Вопрос 19 из 20
Какое свойство темы «Вызов inherited» становится решающим на граничном входе или при другом порядке действий?
Вопрос 20 из 20
Правка по теме «Полиморфизм» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу