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 :
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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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!![]()
Partager