Les fonctions virtuelles pures (lorsque nous définissons = 0
) peuvent également avoir un corps de fonction. Quelle est l'utilisation pour fournir un corps de fonction pour les fonctions virtuelles pures, si elles ne vont pas être appelées du tout?La fonction virtuelle pure C++ a un corps
Répondre
Votre hypothèse selon laquelle la fonction virtuelle pure ne peut pas être appelée est absolument incorrecte. Lorsqu'une fonction est déclarée purement virtuelle, cela signifie simplement que cette fonction ne peut pas être appelée de façon dynamique, via un mécanisme de répartition virtuelle. Pourtant, cette même fonction peut facilement être appelée statiquement, sans répartition virtuelle. En langage C++, un appel statique à une fonction virtuelle est effectué lorsqu'un nom qualifié de la fonction est utilisé dans l'appel, c'est-à-dire lorsque le nom de la fonction spécifié dans l'appel a le formulaire <class name>::<function name>
.
Par exemple
struct S {
virtual void foo() = 0;
};
void S::foo() {
// body for the pure virtual function `S::foo`
}
struct D : S {
void foo() {
S::foo(); // static call to `S::foo` from derived class
}
};
int main() {
D d;
d.S::foo(); // another static call to `S::foo`
}
Pour la plupart des fonctions virtuelles pures, vous auriez raison. Cependant, pour un destructeur virtuel pur, il est important de définir une implémentation de destructeur correspondante:
- Le "virtuel pur" doit exiger des classes dérivées pour implémenter leur destructeur.
- L'implémentation de votre destructeur de classe de base est telle que les destructeurs de classe dérivés peuvent ensuite "s'enchaîner".
(Je réalise que cette réponse date d'un an, mais j'ai juste vu un lien renvoyant les gens à cette question, alors ...) Votre premier point est faux, un destructeur virtuel pur ne force pas les classes dérivées à implémenter un destructeur. La classe dérivée aura toujours un destructeur, même s'il est implicitement défini. Un des avantages d'un destructeur virtuel pur est de rendre un résumé de classe s'il n'a pas d'autres fonctions propres à être virtuel pur. –
"Effective C++" Meyers mentionne une raison d'une fonction virtuelle pure à ont un corps: classes dérivées mettent en œuvre cette fonction virtuelle pure peut appeler cette mise en œuvre smwhere dans leur code. Si une partie du code de deux classes dérivées différentes est similaire alors il est logique de le déplacer dans la hiérarchie, même si la fonction doit être pure virtuelle.
voir here.
- 1. Différence entre la fonction virtuelle et la fonction virtuelle pure?
- 2. différence entre une fonction virtuelle et une fonction virtuelle pure
- 3. Comment invoquer la fonction virtuelle pure?
- 4. Où est la fonction virtuelle pure située en C++?
- 5. overloading delete, appel de fonction virtuelle pure
- 6. C++ cli pure fonction virtuelle surchargée (ou désactivation?)
- 7. Appel de fonction virtuelle pure avec JSonCpp
- 8. Ai-je implémenté une fonction virtuelle pure?
- 9. fonction virtuelle pure et classe abstraite
- 10. Que signifie `= 0` dans la décalcification d'une fonction virtuelle pure?
- 11. qualificatif const disparaît de la fonction virtuelle pure
- 12. "la fonction a déjà un corps"
- 13. Erreur: méthode virtuelle pure appelée
- 14. application Windows s'écraser avec appel de fonction virtuelle pure
- 15. D'où viennent les plantages "Appel de fonction virtuelle pure"?
- 16. Quel est l'équivalent d'une fonction pure-virtuelle C++ dans Objective-C?
- 17. C++ Fonction virtuelle masquée
- 18. C de fonction virtuelle pure non détectée dans la sous-classe
- 19. Fonction virtuelle en C++
- 20. fonction virtuelle en C++
- 21. fonction virtuelle C de pas appelé dans la sous-classe
- 22. pure définition virtuelle et en ligne
- 23. Implémentation de fonction virtuelle pure et fichiers d'en-tête de C++
- 24. Est-il possible d'obtenir un pointeur sur la définition d'une fonction virtuelle pure?
- 25. la fonction virtuelle pure peut-elle avoir une définition ou un type de retour "void"?
- 26. C++ Déclaration avant pour la fonction virtuelle
- 27. C classe de base abstraite appelant propres résultats de fonction virtuelle pure dans "référence non définie"
- 28. C++ problème de fonction virtuelle
- 29. C++ Erreur de réception avec fonction virtuelle pure, "variable ou champ 'x' déclaré comme nul"
- 30. performance de la fonction virtuelle C++
double possible de [fonction virtuelle pure mise en œuvre] (http://stackoverflow.com/questions/2089083/pure-virtual-function-with-implementation) –
Désolé! Je suis un peu nouveau sur ce forum. J'ai accepté les réponses à ce que je ressentais bien. merci pour suggesssions. – Vijay
Copie possible de [fonction virtuelle pure avec implémentation] (https://stackoverflow.com/questions/2089083/pure-virtual-function-with-implementation) – finnw