Ada_Ru форум

Обсуждение языка Ада

tagged types

Оставить новое сообщение

Сообщения

Oleksandr Havva
tagged types
2002-12-19 10:18:32

hi,

мужики, тут вот интересненькая проблемка обнаружилась,

все просто, но нифига не понятно

(ес-сно, что чего-то я просто не знаю/не понимаю)

в обчем, все по порядку, вопрос "на засыпку" будет

в конце сообчения.

спецификация простенького пакета:

------------------------------------------------------------

package Simple_Objects is

-- тип Root и его примитивные операции

type Root is tagged

record

Field_1 : Integer;

end record;

function The_Name (Self: in Root) return String;

procedure Show (Self: in Root'Class);

-- тип Child_1 и его примитивные операции

type Child_1 is new Root with null record;

function The_Name (Self: in Child_1) return String;

-- тип Child_2 и его примитивные операции

type Child_2 is new Root with null record;

function The_Name (Self: in Child_2) return String;

end Simple_Objects;

------------------------------------------------------------

тело этого пакета:

------------------------------------------------------------

with Ada.Text_IO;

package body Simple_Objects is

-- примитивные операции типа Root

function The_Name (Self: in Root) return String is

begin

return ("Root");

end The_Name;

procedure Show (Self: in Root'Class) is

begin

Ada.Text_IO.Put_Line ( The_Name(Self) );

end Show;

-- примитивные операции типа Child_1

function The_Name (Self: in Child_1) return String is

begin

return ("Child_1");

end The_Name;

-- примитивные операции типа Child_2

function The_Name (Self: in Child_2) return String is

begin

return ("Child_2");

end The_Name;

end Simple_Objects;

------------------------------------------------------------

вид элементарной тестовой процедуры:

------------------------------------------------------------

with Simple_Objects; use Simple_Objects;

procedure Test_Simple_Objects is

Instance : Root'Class := Child_1'(Field_1 => 0) ;

begin

Show (Instance);

end Test_Simple_Objects;

------------------------------------------------------------

в таком виде, как оно показано выше,

все это компиляется и работает.

а теперь ВНИМАНИЕ, суть идеи/вопроса:

ежели поменять в спецификации пакета описание типа Root

на пустую запись:

type Root is tagged null record;

а все расширения записей - нулевые, то есть

объекты не содержат полей

то КАК тогда описать переменную Instance

в Test_Simple_Objects, с условием, что она

_должна_ иметь надклассовый тип Root'Class ???

точнее, ЧТО должно быть написано в качестве

инициализации ???

Alex

Oleksandr Havva wrote:

 

procedure Test_Simple_Objects is

 

Instance : Root'Class := Child_1'(Field_1 => 0) ;

 

begin

 

Show (Instance);

 

end Test_Simple_Objects;

------------------------------------------------------------

 

точнее, ЧТО должно быть написано в качестве

инициализации ???

 

 

А слабо написать так:

 

Instance : Root'Class := Child_1'(Root with null record);

 

?

 

Вадим

hi,

Vadim Godunko wrote:

А слабо написать так:

>

Instance : Root'Class := Child_1'(Root with null record);

>

?

мн-дя...

использовать эту форму агрегата -

у меня, видать, извилин не хватило :(

пасиба за подсказку!

>

>

Вадим

Alex

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти