Le danger de l'utilisation du pointeur this avec des fonctions virtuelles !
1 réponse
Marc
Bonjour,
je viens de lever un bug dans un programme qui me laisse perplexe.
En fait, je croyais que dans une classe donnée, this était un pointeur du
type de la classe. Mais ce n'est pas exactement le cas.
Exemple :
Le problème, c'est que quand j'implémente ce modèle, si je teste l'égalité
de deux objets de type B, ça me déclenche une boucle sans fin, puisque
l'opérateur != de la classe A va rappeler l'opérateur == de la classe B qui
appelle l'opérateur != de la classe A, etc...
C'est vicieux, non ?
En fait, je trouve dangereux que le polymorphisme s'applique lors de
l'utilisation du pointeur this dans une classe de base!
Qu'en pensez-vous? Y a t-il une solution sans être chaque fois obligé de
qualifier l'opérateur (il y a un fort danger d'oubli ou d'erreur!).
Merci de vos lumières.
Marc
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Thomas Parle
"Marc" a écrit dans le message de news: 3fd83ce6$0$17114$
Bonjour,
En fait, je trouve dangereux que le polymorphisme s'applique lors de l'utilisation du pointeur this dans une classe de base!
Ben ça me parait amha plutôt utile, au contraire.
Qu'en pensez-vous? Y a t-il une solution sans être chaque fois obligé de qualifier l'opérateur (il y a un fort danger d'oubli ou d'erreur!).
Une solution pourrait être d'appeler explicitement des méthodes non virtuelles du genre classA_equals(const A&) dans A et pareil dans B, dans tes opérateurs == et != pour éviter le polymorphisme que tu ne désires pas.
"Marc" <metrica@free.fr> a écrit dans le message de news:
3fd83ce6$0$17114$626a54ce@news.free.fr...
Bonjour,
En fait, je trouve dangereux que le polymorphisme s'applique lors de
l'utilisation du pointeur this dans une classe de base!
Ben ça me parait amha plutôt utile, au contraire.
Qu'en pensez-vous? Y a t-il une solution sans être chaque fois obligé de
qualifier l'opérateur (il y a un fort danger d'oubli ou d'erreur!).
Une solution pourrait être d'appeler explicitement des méthodes non
virtuelles du genre classA_equals(const A&) dans A et pareil dans B, dans
tes opérateurs == et != pour éviter le polymorphisme que tu ne désires pas.
"Marc" a écrit dans le message de news: 3fd83ce6$0$17114$
Bonjour,
En fait, je trouve dangereux que le polymorphisme s'applique lors de l'utilisation du pointeur this dans une classe de base!
Ben ça me parait amha plutôt utile, au contraire.
Qu'en pensez-vous? Y a t-il une solution sans être chaque fois obligé de qualifier l'opérateur (il y a un fort danger d'oubli ou d'erreur!).
Une solution pourrait être d'appeler explicitement des méthodes non virtuelles du genre classA_equals(const A&) dans A et pareil dans B, dans tes opérateurs == et != pour éviter le polymorphisme que tu ne désires pas.