[méthode virtuelle]

[méthode virtuelle] - C++ - Programmation

Marsh Posté le 10-06-2004 à 20:30:18    

Bonsoir,
 
Je n'arrive pas à expliquer pourquoi le bout de code suivant affiche :
Medecin::trace()
Homme::trace()
 
Si une quelqu'un veut bien m'expliquer la subtilité.
 
code en question :

Code :
  1. class Homme
  2. {
  3.   int age;
  4.   public :
  5.     virtual void trace() const {cout << "Homme::trace()" << endl;}
  6.     virtual ~Homme(){};
  7. };
  8. class Medecin : public Homme
  9. {
  10.   const char *diplome;
  11.   public :
  12.     virtual void trace() const {cout << "Medecin::trace()" << endl;}
  13. };
  14. void f(const Homme& x) { x.trace(); };
  15. void g(const Homme x) { x.trace(); };
  16. void main()
  17. {
  18.   Medecin docteur;
  19.   f(docteur);
  20.   g(docteur);
  21. }

Reply

Marsh Posté le 10-06-2004 à 20:30:18   

Reply

Marsh Posté le 10-06-2004 à 20:59:13    

avec f, l'objet est passé par référence. Aussi c'est la méthode du type véritable de l'objet (Medecin) qui est appelée
 
avec g, l'objet est copié : un objet de type Homme est créé par copie de l'objet Medecin, et c'est donc la méthode de la copie (son type est Homme) qui est appelée


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 10-06-2004 à 21:55:21    

ça roule
et ça s'appel le polymorphisme si je ne suis pas complétement à coté de la plaque.
 
Au passage, quel est l'intérêt de déclarer la méthode trace (de la classe Medecin), virtuelle, sachant quelle est déjà déclarer ainsi dans la classe parente ?

Reply

Marsh Posté le 10-06-2004 à 22:09:22    

BlackGoddess : suis impressionné ... faut vraiment que je révise/apprenne ...
as-tu des réfèrences/ouvrages à conseiller ?

Reply

Marsh Posté le 10-06-2004 à 23:15:09    

le polymorphisme oui me semble
 
l'interet de la déclarer virtuelle, c'est pour ses filles (à Medecin)
 
euh ... pas vraiment d'ouvrage/référence ... c'est sur ce forum que j'ai appris, et compris les mécanismes.
le cours de C. Casteyde m'a aidé aussi.


---------------
-( BlackGoddess )-
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed