histoire de con(-travariance) marrante [C++] - C++ - Programmation
Marsh Posté le 21-07-2004 à 12:40:25
t'es un multi à Taz ?
Marsh Posté le 21-07-2004 à 15:39:31
// outrepassons la regle contravariance
ça veut dire quoi ?
Marsh Posté le 21-07-2004 à 18:46:51
Taz : si j'ai bien compris, le compilateur refuse logiquement de convertir un pointeur de fonction membre d'une classe dérivée en un pointeur de fonction membre de la classe de base corespondante. Avec le cast, j'ai voulu obliger le compilateur à ne pas respecter cette regle.
Marsh Posté le 21-07-2004 à 19:28:37
Je cite papa Stroustrup : " Une classe dérivée possède, au minimum, les membres hérités de ses classes de base. En fait, elle en possède souvent davantage. Cela siginifie que nous pouvons affecter sans risque le pointeur d'un membre d'une classe de base à celui d'un membre d'une classe dérivée, mais pas le contraire. Cette propriété est souvent nommée contravariance. Par exemple :
Code :
|
Marsh Posté le 21-07-2004 à 19:48:47
bah je connaissais pas le mot. Ni qu'il y ait besoin de d'établir une règle la dessuer, ça parait naturel.
Marsh Posté le 21-07-2004 à 19:56:13
bah si co/contravariance. la contravariance, c'est ce que font tous les langages car c'est facile à typer, mais ça emmerde touts le développeurs. La covariance, c'est ce dont les développeurs ont besoins mais qu'on sait pas typer.
Marsh Posté le 21-07-2004 à 12:31:54
Je voulais vérifier un truc en lisant la bible de papa ( ) et voila que je tombe sur un drôle de fonctionnement (MinGW).
Je m'attendais à obtenir une erreur pendant l'execution du programme ci-dessus. Pas du tout! Je ne pense pas qu'il s'agisse d'un reel probleme d'implémentation au niveau du compilateur mais plutot d'une optimisation qui, par effet de bord, autorise un tel appel de fonction. La regle de contravariance est respectée dans tous les cas.