J'ai une question qui me dérange pendant quelques jours.Qu'est-ce qui est spécial au sujet du mécanisme de classe abstraite en C++?
La classe abstraite est un type spécial de classe que nous ne pouvons pas instancier, n'est-ce pas? (Qui est noté/spécifié en donnant un "= 0" à au moins une déclaration de méthode, qui ressemble à une réflexion après coup). Quels sont les avantages supplémentaires que le mécanisme de classe abstraite apporte au C++, qu'une classe de base «normale» ne peut pas atteindre?
Nous pouvons définir une classe de base et choisissez de ne pas fournir d'implémentation pour toute méthode (virtuelle), les classes dérivées, fourniront l'implémentation de la méthode. Nous pouvons instancier cette classe de base sans appeler aucune méthode. La chose supplémentaire qu'une classe abstraite offre est que nous ne pouvons pas instancier la classe elle-même, ai-je raison? – riderchap
@riderchap: c'est une fonctionnalité importante, mais pas la seule. L'instanciation d'une classe de base qui n'a pas de comportement défini est complètement ancienne. Les fonctions virtuelles pures donnent au compilateur la capacité de détecter si vous essayez de faire des choses absurdes. Mais même plus que cela, ils forcent les classes dérivées à implémenter certaines méthodes, donc une classe dérivée implémentée de manière incorrecte ne peut pas tomber accidentellement sur la méthode non implémentée qu'elle a héritée de la classe de base. – suszterpatt
@suszterpatt: La classe dérivée n'est pas obligée de l'implémenter. C'est seulement que quelqu'un dans la hiérarchie doit l'implémenter, alors seulement vous pouvez appeler la méthode. C'est le même effet qu'une classe de base déclarant simplement une fonction virtuelle et ne l'implémentant pas. – riderchap