Maison > développement back-end > C++ > Comment les classes héritées peuvent-elles accéder aux variables protégées dans les classes parents modélisées en C ?

Comment les classes héritées peuvent-elles accéder aux variables protégées dans les classes parents modélisées en C ?

Mary-Kate Olsen
Libérer: 2024-12-06 20:16:12
original
614 Les gens l'ont consulté

How Can Inherited Classes Access Protected Variables in Templated Parent Classes in C  ?

Accès aux variables héritées de la classe parent modèle

L'extrait de code fourni illustre un scénario dans lequel la classe héritée Bar tente d'accéder aux variables protégées de son classe parent Foo, qui est une classe basée sur un modèle. Cependant, le compilateur génère des erreurs, ce qui entraîne une confusion quant à savoir si le compilateur adhère à la norme.

Selon la norme C, les noms non qualifiés dans un modèle sont considérés comme non dépendants et doivent être résolus lorsque le modèle est défini. . Étant donné que les modèles de classe de base spécialisés peuvent ne pas être disponibles lors de la définition du modèle, les noms non qualifiés non résolus entraînent des erreurs.

Cela s'applique à la fois aux variables et aux fonctions déclarées dans la classe de base, comme le montre l'exemple où Bar peut accéder a en utilisant des noms qualifiés ou en utilisant des déclarations. Ce dernier permet un accès non qualifié au sein de la classe dérivée, résolvant ainsi l'erreur initiale.

Par exemple, les modifications de code suivantes résolvent le problème :

template<class T>
int Bar<T>::Perna(int u) {
  int c = Foo<T>::a * 4;  // Qualified name
  c = this->a * 4;        // Pointer to own instance
  using Foo<T>::a;
  c = a * 4;               // Using declaration
}
Copier après la connexion

En clarifiant les règles de recherche et en proposant des solutions alternatives , cette explication souligne les nuances de la résolution des modèles et aide les développeurs à comprendre la justification du comportement du compilateur.

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