função de membro princípio C ++ com funções virtuais

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.

Ele publicou 187 artigos originais · ganhou elogios 14 · vista 40000 +

Acho que você gosta

Origin blog.csdn.net/LU_ZHAO/article/details/105011378
Recomendado
Clasificación