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
prev parent 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