Considérons les deux morceaux de code ci-dessous:
#include <iostream>
class A {
public:
void fun(){
printf("Hello world\n");
}
};
int main()
{
A* a = nullptr;
a->fun();
return 0;
}
#include <iostream>
class A {
public:
virtual void fun(){
printf("Hello world\n");
}
};
int main()
{
A* a = nullptr;
a->fun();
return 0;
}
Une première sortie « Bonjour tout le monde », la deuxième période d'erreur.
La raison en est:
Lorsque c ++ fonction membre, la valeur par défaut d'une fonction de membre de la première classe basée sur l'adresse paramètre, donc plus que l'équivalent de plaisir (nullptr).
Et la mise en œuvre des fonctions virtuelles, il est la nécessité d'objets liés à la mémoire. Lorsque l'appel de fonction virtuelle se produit tout d'abord dans la première adresse pour trouver cet objet table de fonction virtuelle, trouver la fonction virtuelle correspondante sera appelée. Le pointeur NULL est pas naturellement une table de fonction virtuelle.