Si j'ai une classe de base et que j'en dérive 10 classes dérivées concrètes différentes, alors chaque classe dérivée concrète aura-t-elle une vtable différente?vtables pour les classes dérivées, concrètes,
Répondre
Cela dépend si vos classes dérivées remplacent ou déclarent des méthodes virtuelles.
Si la classe de base ou toutes les classes dérivées ont des fonctions virtuelles, alors oui, habituellement. Pourquoi c'est important?
Deux classes ne peuvent partager un vtable que si elles possèdent un ensemble indentical de fonctions virtuelles. Ainsi, une classe dérivée ne peut partager un vtable avec une classe de base que si elle ne remplace aucune fonction virtuelle. Une classe dérivée ne peut partager une vtable avec aucune autre classe dérivée à moins qu'elles ne remplacent aucune des fonctions de la même classe de base car, même si elles sont implémentées de la même manière, les fonctions membres d'une classe dérivée sont un type différent des fonctions membres d'une classe dérivée différente.
J'étais juste confus que si toutes les classes dérivées vont utiliser une seule table v ou ils vont avoir différent –
oui en effet chaque classe dérivée chevauche les fonctions virtuelles de leur propre puisque la classe de base est purement abstraite, alors il y aura b séparer v tables ??? –
Ils ne peuvent partager un vtable que s'ils ont un ensemble indentical de fonctions virtuelles. Cela signifie qu'une classe dérivée ne peut partager un vtable avec une classe de base que si elle ne remplace aucune fonction virtuelle. –
- 1. La duplication ennuyeuse dans les classes dérivées
- 2. Déclaration des Enums dans les classes dérivées
- 3. SetUp dans les classes dérivées avec NUnit?
- 4. Sérialisation XML des classes dérivées
- 5. Comment puis-je forcer toutes les classes dérivées à implémenter une méthode ou une propriété abstraite?
- 6. Héritage multiple de deux classes dérivées
- 7. Application d'un style à toutes les classes dérivées dans WPF
- 8. Comment Hibernate crée-t-il des proxies de classes concrètes?
- 9. Surcharge des constantes dans les classes dérivées en C#
- 10. L'événement non-abstrait défini dans la classe abstraite n'apparaîtra pas dans Designer pour les classes dérivées
- 11. Pourquoi les classes dérivées n'ont-elles parfois que des types spécialisés dans les méthodes surchargées?
- 12. Refactorisation des méthodes dérivées des classes dérivées à la méthode de la classe de base commune? (C#)
- 13. Comment utiliser les classes dérivées de la classe de liste Python
- 14. Pourquoi les classes dérivées devraient-elles gérer un événement sans attacher un délégué?
- 15. Propriétés dérivées déclaratives pour les modèles mutables en Java
- 16. Existe-t-il un moyen de faire en sorte que les classes dérivées remplacent ToString()?
- 17. Quelle requête/path-language est utilisée pour les références dans les instances XMI dérivées d'Ecore?
- 18. C#: Ajout des méthodes d'extension à une classe de base pour qu'ils apparaissent dans les classes dérivées
- 19. interfaces pour les classes modèles
- 20. Recherche de méthodes dans des classes dérivées avec ActiveRecord - Single Table Inheritance
- 21. Incompatibilité de type pour les classes génériques
- 22. signatures JNI pour les classes imbriquées?
- 23. Entity Framework - Association des entités dérivées
- 24. Castle Windsor Injection de dépendances avec plusieurs implémentations concrètes
- 25. index et accélération des requêtes 'dérivées'
- 26. Comment lire les données pour les classes imbriquées?
- 27. Quelles sont les règles pour nommer les classes AS3?
- 28. Pourquoi utiliser IDictionary pour les classes enfants pour NHibernate?
- 29. tables dérivées dans LINQ to SQL
- 30. sous les classes Databinding
Quelle langue/runtime/compilateur etc.? –
Ma conjecture est C++. C'est le seul langage populaire qui possède à la fois des méthodes virtuelles et non virtuelles. – EFraim
Pourquoi est-ce marqué comme subjectif? –