la fonction de membre de principe C avec des fonctions virtuelles

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.

Il a publié 187 articles originaux · louange gagné 14 · vues 40000 +

Je suppose que tu aimes

Origine blog.csdn.net/LU_ZHAO/article/details/105011378
conseillé
Classement