C ++ Pointer à la fonction virtuelle
Si vous avez une structure comme celle -
struct A {
void func();
};
et une référence comme celui-ci
A& a;
vous pouvez obtenir un pointeur vers son func
méthode comme ceci:
someMethod(&A::func);
Maintenant, si cette méthode est virtuelle et vous ne savez pas ce que c'est au moment de l'exécution? Pourquoi ne pouvez-vous pas obtenir un pointeur comme ça?
someMethod(&a.func);
Est-il possible d'obtenir un pointeur vers cette méthode?
source d'informationauteur Chris
Vous devez vous connecter pour publier un commentaire.
Pointeurs aux membres de prendre en compte la virtualité des fonctions qu'ils pointent.
Par exemple:
Sorties:
La façon d'invoquer un pointeur de fonction est aussi de donner son instance de l'objet de pointeur. Cela va prendre soin de tous les virtualité questions:
OK, intéressant
syntaxe défiquestion: Supposons que j'ai ce.Maintenant, si j'ai
Derrek * p
ou unBasil * p
je peux invoquer leBasil
membre viap->Basil::foo()
. Comment pourrais-je faire la même chose si on m'avait donné unvoid(Derrek::*q)() = &Derrek::foo
?Réponse: Il ne peut pas être fait. Le CMR
q
seul ne permet pas de savoir s'il y a des points à une fonction virtuelle, a fortiori, que l'on, et il ne peut pas être utilisée pour rechercher une classe de base de la fonction au moment de l'exécution. [Merci à Steve et Luc!]Vous pouvez obtenir un pointeur, comme: