Maison > développement back-end > C++ > Pourquoi devriez-vous éviter d'hériter de « std::string » ?

Pourquoi devriez-vous éviter d'hériter de « std::string » ?

Susan Sarandon
Libérer: 2024-12-10 19:09:14
original
897 Les gens l'ont consulté

Why Should You Avoid Inheriting from `std::string`?

Pourquoi il est déconseillé d'hériter de std::string

Dans Effective C , l'accent est mis sur le fait qu'un virtuel Le destructeur est crucial pour la capacité d’une classe à présenter un comportement polymorphe. L'absence de destructeur virtuel dans std::string interdit donc effectivement d'en dériver. Cela nous amène à la question : quels critères supplémentaires une classe doit-elle remplir pour être considérée comme une classe de base appropriée ?

Éligibilité au statut de classe de base

Contrairement à l'hypothèse implicite dans la question, une classe n'a pas besoin de prendre en charge le polymorphisme pour servir de classe de base. L'héritage en C répond à deux objectifs principaux :

  1. Héritage privé :Cette technique est exploitée pour des pratiques innovantes telles que les mixins et la programmation orientée aspect basée sur des modèles.
  2. Héritage public : Cette forme d'héritage est strictement réservée à l'établissement de polymorphes scénarios.

std::string comme classe de base

La raison va au-delà de l'absence d'un destructeur virtuel. std::string n'a jamais été destiné à fonctionner comme une classe de base, polymorphe ou autre. Cela peut être attribué aux propriétés des classes en C.

Contrairement à d'autres langages orientés objet où les classes sont des types référence, C traite les classes comme des types valeur. Par conséquent, lorsqu’un objet de classe de base est copié, seuls ses membres sont copiés, et non ceux des classes dérivées. Ce phénomène, connu sous le nom de problème de découpage, peut entraîner des incohérences et des comportements erronés.

Ainsi, plutôt que d'implémenter l'héritage pour l'extension de méthode, il est considéré comme une bonne pratique en C d'utiliser des fonctions non amies et non membres. ou composition. L'héritage doit être réservé à la métaprogrammation de modèles ou à l'établissement d'un comportement polymorphe.

Prévenir l'héritage non polymorphe

Dans les cas où une classe de base est destinée uniquement à la réutilisabilité du code, il existe aucun moyen efficace pour empêcher la création de pointeurs vers des classes dérivées. Cependant, l'utilisation de l'héritage privé, la restriction de l'accès aux méthodes de classe dérivées et l'évitement des méthodes de classe de base publiques peuvent décourager leur utilisation.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal