comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon@pushface.org>
Subject: Re: Classwide Parameter?
Date: 11 Oct 2004 20:16:41 +0100
Date: 2004-10-11T20:16:41+01:00	[thread overview]
Message-ID: <x7vy8idrrom.fsf@smaug.pushface.org> (raw)
In-Reply-To: ckeelg$dkb$05$1@news.t-online.com

matthias_k <nospam@digitalraid.com> writes:

> Thanks for that answer. However, I'm still having problems (I have
> rewritten the code to be in one single package now):
> 
> <snip>
> package Graphics is
> 
>     type Shape is abstract tagged null record;
>     procedure Draw (Obj: Shape'Class);

Replace this with 
   procedure Draw (Obj : Shape) is abstract;
as in

package Graphics is

    type Shape is abstract tagged null record;
    procedure Draw (Obj: Shape) is abstract;

    type Circle is new Shape with record
       Radius: Float;
       Center: Float;
    end record;
    procedure Draw (Obj: Circle);

    type Square is new Shape with record
       Size: Float;
    end record;
    procedure Draw (Obj: Square);

end;
with Ada.Text_IO; use Ada.Text_IO;
package body Graphics is

   procedure Draw (Obj: Circle) is
   begin
      Put_Line ("circle");
   end Draw;

   procedure Draw (Obj: Square) is
   begin
      Put_Line ("square");
   end Draw;

end Graphics;
with Graphics;
use Graphics;
procedure Demo is
    type Reference is access all Shape'Class;
    Object: Reference;
begin
    Object := new Circle;
    Draw( Object.all );

    Object := new Square;
    Draw( Object.all );
end;

(use gnatchop)

which said

   smaug.pushface.org[2]$ gnatmake demo
   gcc -c demo.adb
   gcc -c graphics.adb
   gnatbind -x demo.ali
   gnatlink demo.ali
   smaug.pushface.org[3]$ ./demo
   circle
   square
   smaug.pushface.org[4]$ 



If you say
    type Reference is access all Shape'Class;
then your procedure
    procedure Draw (Obj: Shape'Class);
is bound to get called, since A_Reference.all is a Shape'Class.

-- 
Simon Wright                               100% Ada, no bugs.



  reply	other threads:[~2004-10-11 19:16 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-11 16:01 Classwide Parameter? matthias_k
2004-10-11 16:53 ` Matthew Heaney
2004-10-11 17:08   ` matthias_k
2004-10-11 19:16     ` Simon Wright [this message]
2004-10-11 22:53     ` Brian May
2004-10-12  2:29     ` Matthew Heaney
2004-10-12  8:01       ` matthias_k
2004-10-12  8:53         ` Martin Krischik
2004-10-12 13:10         ` Matthew Heaney
2004-10-12  7:59     ` Dmitry A. Kazakov
     [not found]       ` <ckg3h6$qau$03$1@news.t-online.com>
2004-10-12  8:14         ` matthias_k
2004-10-12 15:13           ` Dmitry A. Kazakov
2004-10-12  8:10     ` Martin Krischik
replies disabled

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