Re: Rép : Overriding et primitives .
Jean-Pierre Rosen <[email protected]>
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Message-ID | <[email protected]> |
Pascal a écrit :
> Bonjour.
>
> Par hasard, je suis tombé sur le fait que la définition et
> l'utilisation du type pointeur d'un type étiqueté comme type de
> retour d'une fonction n'en fait pas une primitive !
Normal, c'est un type différent. Seules les opérations portant sur un
type sont primitives pour ce type.
> Elle ne sera donc pas à redéfinir en cas de dérivation :
> package ess_nap1 is
> type Point is tagged record
> X, Y : Integer;
> end record;
> type PPoint is access all Point;
> function Init (X, Y : Integer) return PPoint; -- not a primitive
> procedure Deplace (P : access Point; DX, DY : Integer); --
> primitive
>
> type Cercle is new Point with record
> R : Integer;
> end record;
> type PCercle is access all Cercle;
> -- function Init (X, Y : Integer) return PCercle; -- n'est
> pas à redéfinir !
Car elle n'existe même pas...
> function Init (X, Y, R : Integer) return PCercle; -- not a
> primitive
> end ess_nap1;
>
> Quelle est la différence avec la fonction isolée dans un paquetage
> interne ?
Le paquetage interne sert quand le profil ferait une opération
primitive, et qu'on ne le souhaite pas. En Ada, on essaye d'user des
pointeurs avec modération....
Nota: en 2005, on peut écrire:
function Init (X, Y : Integer) return access Point;
Celle là est primitive, puisqu'elle porte sur le type Point. Ce qui
compte, c'est le nom du type qui apparait dans la définition de la fonction.
--
---------------------------------------------------------
J-P. Rosen ([email protected])
Visit Adalog's web site at http://www.adalog.fr
_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france