Salut,
J'ai une famille de classes pour lequelles j'ai défini une interface commune pour recevoir un visiteur :
La classe mère a la méthode suivante:
qui fait tout simplement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part virtual void accept(Visitor* visitor);
La méthode visit du visiteur peut recevoir plusieurs types dans la chaine d'héritage de la classe mère c'est à dire qu'il y a :
Code : Sélectionner tout - Visualiser dans une fenêtre à part visitor->visit(this);
Mon problème est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
Si je créé un visiteur et que je le donne à la méthode accept() une instance de ClasseFille1 alors le code
me branche sur la méthode
Code : Sélectionner tout - Visualiser dans une fenêtre à part visitor->visit(this)
au lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part void visit(ClasseMere* instance);
Je m'attendrais en effet à ce que visit() s'adapte au type concret ClasseFille1 de mon instance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part void visit(ClasseFille1* instance);
Par contre j'ai remarqué que si je redéfini accept() dans ClasseFille1 :
avec un code identique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part virtual void accept(Visitor* visitor);
Alors c'est bien la méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part visitor->visit(this);
qui est appelée
Code : Sélectionner tout - Visualiser dans une fenêtre à part void visit(ClasseFille1* instance);
Qui aurait une explication ? Quelle est la bonne façon de faire ?
Merci

 

 
		
		 
         
 

 
			
			



 [Conception] Problème de visite typée
 [Conception] Problème de visite typée
				 Répondre avec citation
  Répondre avec citation
Partager