> -- Владимир Лось писал(а):
> А если так foo(new B); ?

Можно и так. Но если использовать после вызова foo объект таки как-то хочется (например уничтожить его), то указатель можно и сохранит.

Кстати, проверил, в Аде в точности то же самое с параметрами по умолчанию.

## Код:
```
package X is
   type A is tagged null record;
   procedure foo ( Self : in A; num : Integer := 0);
   
   type B is new A with null record;
   procedure foo (Self: in B; num : Integer := 10);
   
   procedure test (some : A'class);
end X;
```

## Код:
```
with Ada.Text_IO; use Ada.Text_IO;

package body X is

   procedure foo ( Self : in A; num : Integer := 0) is
   begin
      Put_Line("A::foo");
      Put_Line(Integer'Image(num));
   end foo;

   procedure foo (Self: in B; num : Integer := 10) is

   begin
      Put_Line("B::foo");
      Put_Line(Integer'Image(num));
   end foo;
   
   procedure test (some : A'class) is
   begin
      foo(some);
   end test;
begin
   null;
end X;
```

## Код:
```
with X;

procedure Main is
   B : X.B;
   A : X.A;
begin
   X.test(B);
   X.test(A);
   null;
end;
```

> -- вывод программы писал(а):
> /home/valexey/main B::foo 0A::foo 0