Types tagged et liaison dynamique
Bonjour, je me pense ces derniers sur les types tagged. Et je me posais une question : est-il possible avec l'attribut 'class ou un pointeur sur classe, de disposer d'un objet dont le type pourrait varier ? Exemple, j'ai les classes et méthodes suivantes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| type Voiture is tagged record
puissance : natural ;
marque : string(1..20) ;
end record ;
function init_voiture(p:natural ; m : string) return Voiture ;
procedure rouler(V : Voiture) ;
type Limousine is new Voiture with record
longueur : float ;
end record ;
function init_limousine(p:natural ; m : string ; l : float) return limousine ;
overriding procedure rouler(V : Limousine) ; |
Puis dans mon programme je voudrais avoir ceci :
Code:
1 2 3 4 5 6
| put_line("voulez-vous une voiture ou une limousine?");
get(choix) ; skip_line ;
if choix = 'L'
then MaVoiture := init_limousine(...) ;
else MaVoiture := init_voiture(...) ;
end if ; |
De même, si je déclare MaVoiture comme étant de type Voiture'class, est-il possible d'écrire ensuite MaVoiture.rouler sans avoir à spécifier de quelle méthode rouler je parle ? Bref, comment faire pour que le choix de la méthode se fasse à l'exécution et non à la compilation ?
Merci d'avance.