c392d02.a
来自「linux下编程用 编译软件」· A 代码 · 共 186 行
A
186 行
-- C392D02.A---- Grant of Unlimited Rights---- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained -- unlimited rights in the software and documentation contained herein.-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making -- this public release, the Government intends to confer upon all -- recipients unlimited rights equal to those held by the Government. -- These rights include rights to use, duplicate, release or disclose the -- released technical data and computer software in whole or in part, in -- any manner and for any purpose whatsoever, and to have or permit others -- to do so.---- DISCLAIMER---- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A-- PARTICULAR PURPOSE OF SAID MATERIAL.--*---- OBJECTIVE:-- Check that a primitive procedure declared in a private part is not-- overridden by a procedure explicitly declared at a place where the-- primitive procedure in question is not visible.---- Check for the case where the non-overriding operation is declared in a-- separate (non-child) package from that declaring the parent type, and-- the descendant type is a record extension.---- TEST DESCRIPTION:-- Consider:---- package P is-- type Root is tagged ...-- private-- procedure Pri_Op (A: Root);-- end P;---- with P;-- package Q is-- type Derived is new P.Root with record...-- procedure Pri_Op (A: Derived); -- Does NOT override parent's Op.-- ...-- end Q;---- Type Derived inherits Pri_Op from the parent type Root. However,-- because P.Pri_Op is never visible within the immediate scope of-- Derived, it is not implicitly declared for Derived. As a result,-- the explicit Q.Pri_Op does not override P.Pri_Op and is totally-- unrelated to it.---- Dispatching calls to P.Pri_Op with operands of tag Derived will-- not dispatch to Q.Pri_Op; the body executed will be that of P.Pri_Op.---- TEST FILES:-- The following files comprise this test:---- F392D00.A-- C392D02.A------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0----!with F392D00;package C392D02_0 is type Aperture is (Eight, Sixteen); type Auto_Speed is new F392D00.Remote_Camera with record -- ... FStop : Aperture; end record; procedure Set_Shutter_Speed (C : in out Auto_Speed; Speed : in F392D00.Shutter_Speed); -- Does NOT override. -- This version of Set_Shutter_Speed does NOT override the operation -- inherited from the parent, because the inherited operation is never -- visible (and thus, is never implicitly declared) within the immediate -- scope of type Auto_Speed. procedure Self_Test (C : in out Auto_Speed'Class); -- ...Other operations.end C392D02_0; --==================================================================--package body C392D02_0 is procedure Set_Shutter_Speed (C : in out Auto_Speed; Speed : in F392D00.Shutter_Speed) is begin -- Artificial for testing purposes. C.Shutter := F392D00.Four_Hundred; end Set_Shutter_Speed; ---------------------------------------------------- procedure Self_Test (C : in out Auto_Speed'Class) is begin -- Should dispatch to the Set_Shutter_Speed explicitly declared -- for Auto_Speed. Set_Shutter_Speed (C, F392D00.Two_Fifty); end Self_Test;end C392D02_0; --==================================================================--with F392D00;with C392D02_0;with Report;procedure C392D02 is Basic_Camera : F392D00.Remote_Camera; Auto_Camera1 : C392D02_0.Auto_Speed; Auto_Camera2 : C392D02_0.Auto_Speed; TC_Expected_Basic_Speed : constant F392D00.Shutter_Speed := F392D00.Thousand; TC_Expected_Speed : constant F392D00.Shutter_Speed := F392D00.Four_Hundred; use type F392D00.Shutter_Speed;begin Report.Test ("C392D02", "Dispatching for non-overridden primitive " & "subprograms: record extension declared in non-child " & "package, parent is tagged record");-- Call the class-wide operation for Remote_Camera'Class, which dispatches-- to Set_Shutter_Speed: -- For an object of type Remote_Camera, the dispatching call should -- dispatch to the body declared for the root type: F392D00.Self_Test(Basic_Camera); if Basic_Camera.Shutter /= TC_Expected_Basic_Speed then Report.Failed ("Call dispatched incorrectly for root type"); end if; -- C392D02_0.Set_Shutter_Speed should never be called by F392D00.Self_Test, -- since C392D02_0.Set_Shutter_Speed does not override -- F392D00.Set_Shutter_Speed. -- For an object of type Auto_Speed, the dispatching call should -- also dispatch to the body declared for the root type: F392D00.Self_Test(Auto_Camera1); if Auto_Camera1.Shutter /= TC_Expected_Basic_Speed then Report.Failed ("Call dispatched incorrectly for derived type"); end if; -- Call to Self_Test from C392D02_0 invokes the dispatching call to -- Set_Shutter_Speed which should dispatch to the body explicitly declared -- for Auto_Speed: C392D02_0.Self_Test(Auto_Camera2); if Auto_Camera2.Shutter /= TC_Expected_Speed then Report.Failed ("Call to explicit subprogram executed the wrong body"); end if; Report.Result;end C392D02;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?