comp.lang.ada
 help / color / mirror / Atom feed
From: Dmitry A. Kazakov <mailbox@dmitry-kazakov.de>
Subject: Re: Invoking abstract subprograms in Ada95
Date: Mon, 22 Apr 2002 16:24:26 +0200
Date: 2002-04-22T16:24:26+02:00	[thread overview]
Message-ID: <e068cuk1j6mhque4ajltlu2357supkbor5@4ax.com> (raw)
In-Reply-To: 2dbd76f3.0204220524.158132bb@posting.google.com

On 22 Apr 2002 06:24:15 -0700, michael.jackson5@virgin.net (Mike)
wrote:

>"Grein, Christoph" <christoph.grein@eurocopter.com> wrote in message news:<mailman.1019449992.18314.comp.lang.ada@ada.eu.org>...
>> The following compiles fine (with Rational Apex):
>> 
>> 
>> package Abstract_Class_Wide is
>> 
>>     type T is abstract tagged null record;
>> 
>>     procedure P (X : T) is abstract;
>> 
>>     procedure C (X : T'Class);
>> 
>> end Abstract_Class_Wide;
>>  
>> package body Abstract_Class_Wide is
>> 
>>     procedure C (X : T'Class) is
>>     begin
>> 	P (X);
>>     end C;
>> 
>> end Abstract_Class_Wide;
>
>Hmm - the only differences I can see here are that my abstract method
>also takes a classwide type,

That's the point. It is not a method [in the meaning "overridable"],
when the formal parameter is class wide. It could be a method only
relatively to some specific formal parameter[s]. Class wide means "one
for all derived types", so it cannot be overridden [at least till an
introduction "class class wide types" (:-))]

> and is implemented in a child package.
>Here's the distilled problem:
>
>--
>package abstract_bit is
>
>type A is abstract tagged null record;
>
>procedure generalOperation( this : in out A'class );
>procedure specificOperation( this : in out A'class ) is abstract;

If your intention is to override specificOperation for derived types,
then it should be exactly as in Christoph's example:

procedure specificOperation( this : in out A ) is abstract;

>end abstract_bit;
>
>--
>package body abstract_bit is
>
>procedure generalOperation( this : in out A'class ) is
>begin
>    specificOperation( this => this );
>end generalOperation;
>
>end abstract_bit;
>
>--
>package abstract_bit.concrete_bit is
>
>type C is new A with null record;
>
>procedure specificOperation( this : in out C );
>
>end abstract_bit.concrete_bit;

---
Regards,
Dmitry Kazakov
www.dmitry-kazakov.de



  reply	other threads:[~2002-04-22 14:24 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-04-22  4:28 Invoking abstract subprograms in Ada95 Grein, Christoph
2002-04-22 13:24 ` Mike
2002-04-22 14:24   ` Dmitry A. Kazakov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2002-04-24  7:32 Grein, Christoph
2002-04-22 13:44 Grein, Christoph
2002-04-23  8:36 ` Mike
2002-04-19 13:15 Mike
2002-04-19 16:18 ` Stephen Leake
replies disabled

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