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