with Ada.Text_IO; use Ada.Text_IO; with Animals; use Animals; with Interfaces.C.Strings; use Interfaces.C.Strings; with Animals_Interfaces; use Animals_Interfaces; procedure Main is procedure Check_Carnivore (Obj : Carnivore'Class) is Aux : Natural; begin Put_Line ("Class wide calls to Carnivore ......"); Aux := Obj.Number_Of_Teeth; end Check_Carnivore; procedure Check_Domestic (Obj : in out Domestic'Class) is begin Put_Line ("Class wide calls to Domestic ......"); Obj.Set_Owner (Null_Ptr); end Check_Domestic; procedure Check_Vaccinated_Dog (Obj : in out Vaccinated_Dog'Class) is Aux_1 : Natural; Aux_2 : Boolean; begin Put_Line ("Class wide calls to Vaccinated_Dog ......"); -- Call the inherited primitives (Age, Set_Age) Obj.Set_Age (10); if Obj.Age /= 10 then raise Program_Error; end if; -- Call the primitives that override abstract interfaces Aux_1 := Obj.Number_Of_Teeth; -- Object.Opration notation (AI-252) Obj.Set_Owner (New_String ("Owner's name")); Aux_2 := Obj.Vaccination_Expired; end Check_Vaccinated_Dog; My_Pet : Vaccinated_Dog; -- Constructor in the C++ side begin Check_Carnivore (My_Pet); -- Check secondary DT Check_Domestic (My_Pet); -- Check secondary DT Check_Vaccinated_Dog (My_Pet); -- Check primary DT end Main;