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
Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти