Virtualité, polyphormisme et pointeur de fonction
Bonjour, je travaillais quand j'ai commencé à me trituré de le cerveau avec le code ci-dessous, qui, bien evidement, m'a donné un résultat auquel je ne m'attendais pas :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <iostream>
struct A {
virtual int a() { return 20; }
};
struct B : public A {
virtual int a() { return -10; }
};
int main()
{
typedef int (A::*func)();
func f = &A::a;
B x;
std::cout << (x.*f)() << std::endl;
return 1;
} |
A l’exécution, dans la console on obtient -10. Et pourtant je pensais obtenir 20! Cela parce que mon pointeur de fonction aurait du appeler la fonction de la classe mère non?
En fait la question que je me pose c'est de savoir s'il est possible (dans un cas similaire) depuis l’extérieur avec une instance de B, d’appeler la fonction A::a(), ou si la virtualité et la redéfinition l'en empêche?
Merci, et bonne soirée! :D