C ++ Implémentation de la fonction virtuelle?
Si je l'ai dans le C++:
class A {
private: virtual int myfunction(void) {return 1;}
}
class B: public A {
private: virtual int myfunction(void) {return 2;}
}
Alors si je supprime virtual
de la myfunction
définition dans class B
cela veut dire que si j'avais un class C
basé sur class B
que je ne pouvais pas remplacer la myfunction
car il serait compilé statiquement?
Aussi, je suis confus quant à ce qui se passe quand vous passez autour publics et privés d'ici. Si je change la définition de myfunction
dans class B
publics (et celui de class A
reste privé), est-ce une sorte de grave erreur que je ne devrais pas le faire? Je pense que les fonctions virtuelles besoin de garder le même type de sorte que c'est illégal, mais s'il vous plaît laissez savoir si c'est faux.
Merci!
source d'informationauteur ash | 2009-11-05
Vous devez vous connecter pour publier un commentaire.
La première définition de "virtuel" est le seul qui compte. Cette fonction de base est à partir de là, virtuel, obtenues à partir de, ce qui signifie que vous n'avez pas besoin de "virtuel" pour réimplémentée virtuel des appels de fonction. Si une signature de fonction dans une classe de base n'est pas virtuel, mais virtuelle dans les classes dérivées, puis la classe de base n'a pas de comportement polymorphe.
une fois qu'une fonction virtuelle dans une classe de base, il sera virtuel pour tous les autres sous-classe.
public, privé et protégé n'affectent pas la nature virtuelle de fonctions.
Si Vous supprimez
virtual
de lamyfunction
définition de la classe B,compilateur va ajouter cela pour Vous. Pour remplir V-Tableau de types polymorphes.
!!MAIS!!
Vous avez uniquement accès aux membres publics de la classe A (classe B: public A)
la définition :
Ferai en sorte que tous (même publique) les membres de la classe A, deviendra privé pour la classe B.
Simplifie Vous n'aurez pas un accès à l'Un des membres du public.
Pour contourner ce problème, Vous pouvez déclarer un ami:
Plus grande info ICI.
Le comportement de
virtual
est qu'il les effets de la méthode qui est appelée lorsque vous avez un pointeur d'un type qui pointe vers un objet d'une sous-type. Par exemple:Ce qui se passe lorsque vous appelez
obj->myfunction()
dépend de laA
déclaremyfunction
d'être virtuel. Si elle n'est pas virtuelle, le raisonnement est le suivant: nous avons un pointeur de typeA
de sorte que nous appelons la fonction définie dansA
et le résultat est 1. SiA
définitmyfunction
virtuel, cependant, une recherche est effectuée au moment de l'exécution en fonction du type de l'objet réel, plutôt que le type de l'indicateur; car l'objet est en fait unB
la mise en œuvre définies dansB
est utilisé et le résultat est 2.De plus amples informations peuvent être trouvées dans le C++ FAQ Lite de la section sur les fonctions virtuelles.