[cpp]fonction virtuelle

Voir le sujet précédent Voir le sujet suivant Aller en bas

[cpp]fonction virtuelle

Message  bigmax le Mar 24 Mai 2011, 14:06

Bonjour,
Je suis en train de revoir les fonctions virtuelles mais je n'arrive pas à comprendre leur utilisation dans le pattern O/SDO
car si je prend le code du pendu et que dans la classe sujetDObservation.h je retire le virtual de la méthode attacher, ça ne change rien..
Est ce qu'on utilise alors le mot clé virtual dans l'éventualité que la classe qui implémente SujetDObservation redéfinisse la méthode attacher?

Une idée pour me mettre sur la voie?

Merci d'avance!

bigmax

Nombre de messages : 132
Age : 27
Prénom : Gilles
Statut : 3ème Réseaux
Date d'inscription : 17/11/2007

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  Nicky le Mar 24 Mai 2011, 15:32

bigmax a écrit:
Est ce qu'on utilise alors le mot clé virtual dans l'éventualité que la classe qui implémente SujetDObservation redéfinisse la méthode attacher?

Oui je pense


je trouve l'explication ici pas mal Smile

http://cpp.developpez.com/faq/cpp/?page=virtual

En lisant ce site. Je pense juste que implementé virtual des méthodes de classe d'une classe destinée à être héritée est quelque chose "qui se fait"... au cas ou...

il manque quand meme le mot clé super() en c++ ... non?


Dernière édition par Nicky le Mar 24 Mai 2011, 15:41, édité 1 fois

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  LSV le Mar 24 Mai 2011, 15:40

http://www.siteduzero.com/tutoriel-3-452332-le-polymorphisme.html sinon Smile jtrouvais ca bien expliqué.

En gros, c'est pour t'assurer d'utiliser la bonne "version" de la fonction appelée lorsque tu utilise le polymorphisme.

Si tu recois un "véhicule" (classe mère) comme paramètre, tu dois utiliser la fonction "demarrer()" de moto, de auto, de scooter, d'avion ou de velo (qui sont les classes filles)? Vu qu'en principe, le véhicule recu peut être une voiture, ou une auto, ou..., mais tu ne le sais pas!

Sans le mot clé virtual, ton programme va utiliser la méthode "demarrer()" de véhicule, vu qu'après tout, tu as recu un véhicule. Le polymorphisme ne marche donc pas vraiment..
Tandis que si tu déclare cette fonction virtual, le programme va chercher quel est le type réel de ton paramètre et utiliser la méthode "demarrer()" de ce type la.

Je dois encore le revoir, mais il me semble que, dans le pattern observateur/SDO, il s'agit simplement de permettre a chaque type de "sujet d'observation" de se mettre a jour correctement. Il va utiliser la méthode "se mettre a jour" propre a chaque fils plutot que la méthode "se mettre a jour" de la classe mère, qui pourrait ne pas convenir a tout le monde..

(a prendre avec des pincettes, mais je pense que c'est ca)

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  nvs le Mar 24 Mai 2011, 18:33

bigmax a écrit:Est ce qu'on utilise alors le mot clé virtual dans l'éventualité que la classe qui implémente SujetDObservation redéfinisse la méthode attacher ?
je confirme. note que le virtual à cet endroit n'est pas indispensable, si on considère que cette méthode ne sera pas surdéfinie. par contre, un autre virtual du modèle de conception est obligatoire. je te laisse le trouver Smile








What a Face

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  nvs le Mar 24 Mai 2011, 18:40

Nicky a écrit:il manque quand meme le mot clé super() en c++ ... non?
je te conseille de retourner potasser l'invocation des constructeurs dans le cadre d'une hiérarchie de classes... super() est absent de c++ mais existe sous une autre forme !

par contre, this() est totalement absent du c++98, mais il apparaît -- on appelle ça la délégation--, sous une forme cohérente avec celle de super(), en c++0x.








Like a Star @ heaven

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  nvs le Mar 24 Mai 2011, 18:44

LSV a écrit:Sans le mot clé virtual, [...] [l]e polymorphisme ne marche donc pas vraiment..
je dirais même qu'il ne marche pas du tout ! par défaut, sans virtual, c++ n'est pas polymorphe !

LSV a écrit:Je dois encore le revoir, mais il me semble que, dans le pattern observateur/SDO, il s'agit simplement de permettre a chaque type de "sujet d'observation" de se mettre a jour correctement. Il va utiliser la méthode "se mettre a jour" propre a chaque fils plutot que la méthode "se mettre a jour" de la classe mère, qui pourrait ne pas convenir a tout le monde..

(a prendre avec des pincettes, mais je pense que c'est ca)
oui enfin, ce n'est pas vraiment le SDO qui se met à jour... à revoir Wink






Suspect

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  bigmax le Mar 24 Mai 2011, 18:52

ok merci pour les liens et infos ça m'a été utile!

par contre, un autre virtual du modèle de conception est obligatoire. je te laisse le trouver Smile

Ne serait-ce pas la méthode rafraichir de l'observateur par hasard?

bigmax

Nombre de messages : 132
Age : 27
Prénom : Gilles
Statut : 3ème Réseaux
Date d'inscription : 17/11/2007

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  Nicky le Mar 24 Mai 2011, 19:37

bigmax a écrit:ok merci pour les liens et infos ça m'a été utile!

par contre, un autre virtual du modèle de conception est obligatoire. je te laisse le trouver Smile

Ne serait-ce pas la méthode rafraichir de l'observateur par hasard?

oui Smile

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  LSV le Mer 25 Mai 2011, 00:33

bigmax a écrit:ok merci pour les liens et infos ça m'a été utile!

par contre, un autre virtual du modèle de conception est obligatoire. je te laisse le trouver Smile

Ne serait-ce pas la méthode rafraichir de l'observateur par hasard?

qui est carrément virtuelle pure, ce qui fait donc de l'observateur une classe abstraite Very Happy

nvs a écrit:
LSV a écrit:Sans le mot clé virtual, [...] [l]e polymorphisme ne marche donc pas vraiment..
je dirais même qu'il ne marche pas du tout ! par défaut, sans virtual, c++ n'est pas polymorphe !

LSV a écrit:Je dois encore le revoir, mais il me semble que, dans le pattern observateur/SDO, il s'agit simplement de permettre a chaque type de "sujet d'observation" de se mettre a jour correctement. Il va utiliser la méthode "se mettre a jour" propre a chaque fils plutot que la méthode "se mettre a jour" de la classe mère, qui pourrait ne pas convenir a tout le monde..

(a prendre avec des pincettes, mais je pense que c'est ca)
oui enfin, ce n'est pas vraiment le SDO qui se met à jour... à revoir Wink


Suspect


Comme je l'ai dit en début de post, effectivement je devais le revoir Very Happy
Donc je me corrige: le sujet d'observation change d'état, et utilise donc sa méthode notifierChangement. Cette méthode dit a tous les observateurs inscrits qu'il faut se mettre a jour, grâce a la méthode rafraichir.
Notifier changement fait donc un foreach observateur v{ v.rafraichir())

C'est donc bien l'appel de la méthode rafraichir qui dit a l'observateur qu'il faut se mettre a jour. En appelant cette méthode, il va donc consulter l'état du sujetDObservation et se mettre a jour en conséquence Smile

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  L@rgo_XIII le Jeu 26 Mai 2011, 16:24

nvs a écrit:
bigmax a écrit:Est ce qu'on utilise alors le mot clé virtual dans l'éventualité que la classe qui implémente SujetDObservation redéfinisse la méthode attacher ?
je confirme. note que le virtual à cet endroit n'est pas indispensable, si on considère que cette méthode ne sera pas surdéfinie. par contre, un autre virtual du modèle de conception est obligatoire. je te laisse le trouver Smile
Il valait mieux avoir comprends ça pour l'examen Cool

L@rgo_XIII

Nombre de messages : 80
Age : 30
Prénom : Lionel
Statut : Etudiant en 3e année Réseau & Télécommunicatio
Localisation : Uccle
Date d'inscription : 20/09/2010

http://largoxiii.wordpress.com

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  Nicky le Ven 27 Mai 2011, 10:16

L@rgo_XIII a écrit:
Il valait mieux avoir comprends ça pour l'examen Cool

Funny Funky Troll On jocolor :

Heureusement que les questions d'examens n'étaient pas formulées comme ta phrase muahahahah Very Happy

Funny Funky Troll Off;

ouai je sais, des fois je fais pas mieux xD

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

Re: [cpp]fonction virtuelle

Message  Contenu sponsorisé Aujourd'hui à 15:16


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum