Considere os seguintes dois pedaços de código:
#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;
}
A primeira saída "Olá, mundo", o segundo período erro.
A razão é:
Quando a função de c ++ membro, o padrão de uma função de membro na primeira classe com base em parâmetro endereço, por isso mais do que o equivalente de diversão (nullptr).
E quando implementar funções virtuais, é a necessidade de objetos relacionados à memória. Quando a chamada de função virtual ocorre, em primeiro lugar no primeiro endereço para encontrar essa tabela de função virtual objeto, encontrar a função virtual correspondente será chamado. O ponteiro nulo não é, naturalmente, uma tabela de função virtual.