Maison  >  Article  >  développement back-end  >  Pouvez-vous étendre d'autres classes de la bibliothèque standard C au-delà de « std :: exception » ?

Pouvez-vous étendre d'autres classes de la bibliothèque standard C au-delà de « std :: exception » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 12:33:31501parcourir

Can You Extend Other Classes in the C   Standard Library Beyond `std::exception`?

Extension de la bibliothèque standard C via l'héritage

La bibliothèque standard C, largement perçue comme un bastion inaccessible pour l'héritage, dément une exception cachée au sein ses rangs. La classe std::exception est la seule entité explicitement conçue pour l'extension. Cela soulève la question :

D'autres classes de bibliothèques standard peuvent-elles être étendues ?

Bien qu'aucune liste définitive n'existe, la réponse dépend du déchiffrement de l'intention de la norme. Une approche pragmatique consiste à examiner les critères suivants :

  • Absence de méthodes virtuelles : Les classes dépourvues de méthodes virtuelles ne sont pas destinées à l'héritage de base (par exemple, std::vector).
  • Présence de méthodes virtuelles : Ces classes peuvent servir de classes de base potentielles.
  • Déclarations d'amis : De nombreuses déclarations d'amis suggèrent des problèmes d'encapsulation, décourageant l'héritage.
  • Nature du modèle : Les modèles méritent d'être évalués ; la spécialisation suffit souvent pour la personnalisation.
  • Mécanismes basés sur des politiques : Ces classes (par exemple, std::char_traits) résistent généralement à l'héritage.

Implications de l'héritage des classes de bibliothèque standard

L'extension de std::exception met en évidence une autre préoccupation :

Adhésion aux attentes de l'interface

Lors de l'héritage d'un classe de bibliothèque standard, l'interface héritée doit être respectée. Par exemple, une sous-classe qui modifie la fonction membre what() pour renvoyer un pointeur nul au lieu d'une description valide violerait l'interface spécifiée dans la norme ISO. Bien qu'il ne s'agisse pas strictement d'un problème de conformité aux normes, cela compromet l'exactitude et sape le principe de substituabilité des classes de base.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn