-- File: conveyance.adb -- conveyance class implementation -- -- Prepared by Prof. Spiegel -- Copyright © 1988-1998 Coronado Enterprises - Last update, February 1, 1998 -- Gordon Dodrill - dodrill@swcp.com package body conveyance is -- Subprograms for the TRANSPORT record procedure Set_Values(Vehicle_In : in out TRANSPORT; Wheels_In : INTEGER) is begin Vehicle_In.Wheels := Wheels_In; end Set_Values; function Get_Wheels(Vehicle_In : TRANSPORT) return INTEGER is begin return Vehicle_In.Wheels; end Get_Wheels; procedure Describe(Vehicle_In : TRANSPORT) is begin Put("We are in the TRANSPORT procedure."); new_Line; end Describe; -- Subprograms for the CAR record procedure Set_Values(Vehicle_In : in out CAR; Passenger_Count_In : INTEGER) is begin Vehicle_In.Passenger_Count := Passenger_Count_In; end Set_Values; function Get_Passenger_Count(Vehicle_In : CAR) return INTEGER is begin return Vehicle_In.Passenger_Count; end Get_Passenger_Count; procedure Describe(Vehicle_In : CAR) is begin Put("We are in the CAR procedure."); new_Line; end Describe; -- Subprograms for the TRUCK record procedure Set_Values(Vehicle_In : in out TRUCK; Wheels_In : INTEGER; Passenger_Count_In : INTEGER) is begin -- This is one way to set the values in the base class Vehicle_In.Wheels := Wheels_In; -- This is another way to set the values in the base class Set_Values(TRANSPORT(Vehicle_In), Wheels_In); -- This sets the values in this class Vehicle_In.Passenger_Count := Passenger_Count_In; end Set_Values; function Get_Passenger_Count(Vehicle_In : TRUCK) return INTEGER is begin return Vehicle_In.Passenger_Count; end Get_Passenger_Count; procedure Describe(Vehicle_In : TRUCK) is begin Put("We are in the TRUCK procedure."); new_Line; end Describe; -- Subprograms for the BICYCLE record procedure Describe(Vehicle_In : BICYCLE) is begin Put("We are in the BICYCLE procedure."); New_Line; end Describe; -- Print_Values is a class-wide operation. It can accept objects -- of any type within the TRANSPORT heirarchy. procedure Print_Values(Any_Vehicle : TRANSPORT'Class) is begin -- Describe(Any_Vehicle); Put("This vehicle has"); Put(Any_Vehicle.Wheels, 2); Put(" wheels."); New_Line; -- The following line of code will produce an error because TRANSPORT -- and BICYCLE do not contain this variable. -- Put(Any_Vehicle.Passenger_Count, 5); end Print_Values; end Conveyance; -- Result of execution -- -- (This program cannot be executed alone.)