Comprendre l'héritage et l'initialisation d'objets en C pour l'accès aux fonctions virtuelles
En C, l'héritage permet la création de classes dérivées qui héritent de propriétés et de comportements des classes de base. Cependant, l'ordre d'initialisation des objets en C peut avoir un impact sur le comportement des fonctions virtuelles.
Question :
Lorsqu'un objet est construit en C avec une classe de base ayant un virtuel fonction, pourquoi cette fonction pourrait-elle se comporter de manière inattendue ?
Réponse :
Le concept clé ici est l'ordre d'initialisation des classes de base et dérivées. En C , les classes de base sont construites avant les classes dérivées.
Explication :
Dans l'exemple fourni :
Pour corriger ce comportement :
Pour garantir que la fonction value() de la classe dérivée est appelée lors de la construction de l'objet, vous devez initialiser le classe de base explicitement avec l'adresse de l'instance de classe dérivée :
derived example; base(&example).value()
En passant l'adresse de l'objet dérivé, vous demandez au constructeur de base d'appeler le fonction value() sur l'objet dérivé, "maturisant" efficacement l'objet dans sa forme dérivée complète.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!