comp.lang.ada
 help / color / mirror / Atom feed
From: Warren <ve3wwg@gmail.com>
Subject: Re: Q: How to inherit methods from parent tagged object?
Date: Thu, 21 May 2020 07:20:15 -0700 (PDT)
Date: 2020-05-21T07:20:15-07:00	[thread overview]
Message-ID: <7f6e7b7e-f5c3-4624-b59e-020d215152e1@googlegroups.com> (raw)
In-Reply-To: <7ec397ae-f1be-4791-9e83-278f0ee2aded@googlegroups.com>

On Thursday, 21 May 2020 09:50:24 UTC-4, Jere  wrote:
> On Thursday, May 21, 2020 at 9:23:52 AM UTC-4, Warren wrote:
> > I've become rusty and am refreshing myself with Ada again using a pet project..
> > 
> > I have a tagged class that I want to inherit all but one of the methods for:
> > 
> >    type Flash is new Emulator.Memory.Flash with private;
> >    
> >    procedure Initialize(Obj: in out Flash);
> > --   function Fetch(Obj: in out Flash; Address: Address_Type) return Word_Type;
> > --   function First_Address(Obj: in Flash) return Address_Type;
> > --   function Last_Address(Obj: in Flash) return Address_Type;
> > 
> > The only thing I want to override in the new object is the Initialize procedure for the new object. There must be a way to specify that but I can't seem to goggle it on the interwebs. Every example I can find completely redefines all of the methods.  
> > 
> > I'd like to avoid re-specifying the bodies of Fetch, First_Address and Last_Address for the new object, if that is permitted.  If memory serves, there is a way... but the worms have invaded my brain.
> 
> I feel like you are either leaving out some other info about
> Emulator.Memory.Flash or I am just completely misunderstanding.
> If you only want to override Initialize, then just do that:
> 
>    type Flash is new Emulator.Memory.Flash with private;
>    overriding procedure Initialize(Obj: in out Flash);
> 
> The "overriding" keyword is optional but good practice.  Doing this
> will override Initialize but not the other operations.  If this
> doesn't work you need to tell us more about any errors you are
> encountering.  Note that this is true for almost all languages
> that support inheritance, you just override the operations you want 
> to and the rest will just use the baseclass version.

When I just try to override Initialize, I get the error:

emulator-memory-attiny13.ads:46:09: missing full declaration for private extension

Arrrg, I found the problem.. and am embarrassed to say, I was missing the:

  type Flash is new Emulator.Memory.Flash with null record;

in the private section. DOH!

Thanks for your time.

      reply	other threads:[~2020-05-21 14:20 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-21 13:23 Q: How to inherit methods from parent tagged object? Warren
2020-05-21 13:50 ` Jere
2020-05-21 14:20   ` Warren [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