comp.lang.ada
 help / color / mirror / Atom feed
From: mheaney@ni.net (Matthew Heaney)
Subject: Re: Can't find the answer
Date: 1997/11/22
Date: 1997-11-22T00:00:00+00:00	[thread overview]
Message-ID: <mheaney-ya023680002211971304140001@news.ni.net> (raw)
In-Reply-To: 655s7e$ei9@netline.jpl.nasa.gov


In article <655s7e$ei9@netline.jpl.nasa.gov>, vsnyder@math.jpl.nasa.gov
(Van Snyder) wrote:


>Suppose I have a type T1, and extend it to a type T2.
>
>Suppose I have a procedure P that takes an argument of type T1,
>not T1'class.
>
>Can I invoke P directly on an object of type T2?  Not a classwide
>object of T1'class, and not an object of type T2 converted explicitly
>to T1 by T1().

I assume that the types are tagged, since you're talking about T'Class.

Yes, you can invoke the operation P on an object of T2, if the operation
was a "primitive" operation of T1.  By "primitive" I mean the subprogram
was declared in the same package spec as the declaration of the type
itself.  If so, type T2 inherited the P operation when it derived from T1. 
(Actually, here it doesn't make any difference whether the type is tagged.)

Here's an example:

package Q1 is

   type T1 is tagged record ...;

   procedure P (O : T1);

end;

P is a primitive operation of type T1.  So when I derive from T1, ie

with Q1;
package Q2 is

   type T2 is new Q1.T1 with ...;
 
-- procedure P (O : T2);  -- is implicitly declared here

end Q2;

Now, had package Q1 looked like

package Q1 is

   type T1 is tagged ....;

   package Inner is

      procedure P (O : T1);

   end Inner;

end Q1;

then P is no longer a "primitive" operation of T1; it's just a plain old
operation.  Therefore it would not be inherited by T2.

--------------------------------------------------------------------
Matthew Heaney
Software Development Consultant
<mailto:matthew_heaney@acm.org>
(818) 985-1271




      reply	other threads:[~1997-11-22  0:00 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-11-22  0:00 Can't find the answer Van Snyder
1997-11-22  0:00 ` Matthew Heaney [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox