PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → [WD10] Polymorphisme
[WD10] Polymorphisme
Started by guest, Apr., 24 2006 1:30 PM - 3 replies
Posted on April, 24 2006 - 1:30 PM
Bonjour,

Soit 3 classes : clA, clB, clC
clB et clC dévirent de clA

Et soit clE qui utilise clA.

Si je fais:
MonObjetB est un clB dynamique
MonObjetB = allouer un clB

MonObjetE est un clE dynamique
MonObjetE = allouer un clE

MonObjetE:MaMéthode(MonObjetB)

Et si la méthode MaMéthode est déclarée comme ça:

Procédure MaMéthode(valeur est un clA)

Ben Windev le retourne l'erreur suivante: Un élément de type clB dynamique ne peut pas être converti vers le type ClA.

Si maintenant je fais:

MonObjetB est un clA
MonObjetB = allouer un clB

windev me dit que les méthodes mB et mBB n'existent pas dans la classe clA (ce que je comprend car elle sont définies dans la classe clB).

Ma question est:

Comment utiliser un objet clA (qui est soit unclB soit un clC et qui est membre de clE) dans ma classe clE.

Selon mes souvenirs, on pouvait faire ça (en C++ par exemple), et ça s'appellait le polymorphisme...

Merci d'avance de vos lumières,
Posted on April, 24 2006 - 4:54 PM
Jean-Michel FLAMBARD a écrit :
Bonjour,

Soit 3 classes : clA, clB, clC
clB et clC dévirent de clA

Et soit clE qui utilise clA.

Si je fais:
MonObjetB est un clB dynamique
MonObjetB = allouer un clB

MonObjetE est un clE dynamique
MonObjetE = allouer un clE

MonObjetE:MaMéthode(MonObjetB)

Et si la méthode MaMéthode est déclarée comme ça:

Procédure MaMéthode(valeur est un clA)

Ben Windev le retourne l'erreur suivante: Un élément de type clB dynamique ne peut pas être converti vers le type ClA.

Si maintenant je fais:

MonObjetB est un clA
MonObjetB = allouer un clB

windev me dit que les méthodes mB et mBB n'existent pas dans la classe clA (ce que je comprend car elle sont définies dans la classe clB).

Ma question est:

Comment utiliser un objet clA (qui est soit unclB soit un clC et qui est membre de clE) dans ma classe clE.

Selon mes souvenirs, on pouvait faire ça (en C++ par exemple), et ça s'appellait le polymorphisme...

Merci d'avance de vos lumières,


tout à fait, avec des pointeurs sur tes différentes instances, en C++ ca
marcherait sans soucis.

Deux propositions à tester :

Dans clE::MaMéthode, ne pas typer le paramètre
->
MaMéthode(valeur)

ne pas faire d'allocations dynamiques si possible ?

-> le tout sans garantie ;)

bon dev
eric l.
Posted on April, 24 2006 - 5:49 PM
Merci Eric,

Sans typer le paramètre dans la m"éthode MaMéthode(valeur) ça à l'air de fonctionner.
Par contre je me demande comment car MaMéthode affecte valeur à un membre de clE qui est lui un clA dynamique (et alloué comme tel dans le constructeur de clE)...

Une réponse ?


Jean-Michel
Posted on April, 24 2006 - 6:22 PM
je n'aurais pas de réponse précise mais j'ai remarqué quelques
fois que windev "se débrouille mieux" avec des paramètres non typés
et qu'il est parfois nécessaire de ne pas typer pour obtenir
le fonctionnement "logique"...?!

éventuellement si tu contactes le support pour demander des précisions,
poste ici leur réponse ?

pas mieux :(
eric l.

Jean-Michel FLAMBARD a écrit :
Merci Eric,

Sans typer le paramètre dans la m"éthode MaMéthode(valeur) ça à l'air de fonctionner.
Par contre je me demande comment car MaMéthode affecte valeur à un membre de clE qui est lui un clA dynamique (et alloué comme tel dans le constructeur de clE)...

Une réponse ?


Jean-Michel