función miembro Principio C ++ con funciones virtuales

Considere los siguientes dos piezas 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;
}

Una primera salida "Hola mundo", el segundo período de error.

La razón es la siguiente:

Cuando la función de c ++ miembro, el valor predeterminado de una función miembro de la primera clase basada en la dirección de parámetro, por lo que más que el equivalente de diversión (nullptr).

Y en la aplicación de las funciones virtuales, es la necesidad de objetos relacionados con la memoria. Cuando se produce la llamada de función virtual, en primer lugar en la primera dirección para encontrar este objeto de tabla de función virtual, encontrar la función virtual correspondiente se llamará. El puntero nulo no es, naturalmente, una tabla de función virtual.

Ha publicado 187 artículos originales · ganado elogios 14 · vistas 40000 +

Supongo que te gusta

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