Maison >développement back-end >C++ >Pourquoi ne puis-je pas accéder aux variables membres de la classe parent dans ma classe héritée ?
Variables membres de la classe parent non visibles dans la classe héritée
Lors de l'héritage d'une classe en tant que modèle, les variables protégées de la classe parent peuvent ne pas être visible dans la classe héritée. Cela peut entraîner des erreurs de compilation lors de l'accès à ces variables dans la classe héritée.
Considérons l'exemple suivant :
<code class="cpp">// Parent class template <class elemType> class arrayListType { protected: elemType *list; int length; // ... }; // Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { public: void insertAt(int location, const elemType& insertItem); // ... };</code>
Lorsque le compilateur rencontre la classe unorderedArrayListType, il tente de valider la fonction insertAt. . Cependant, il ne trouve pas les variables de longueur et de liste déclarées dans la classe arrayListType. Cela entraîne des erreurs de compilation.
Solution
Pour résoudre ce problème, il existe deux solutions possibles :
1. Préfixez avec this->
Préfixez les variables héritées avec this-> précise explicitement qu'ils appartiennent à la classe parent :
<code class="cpp">// Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { public: void insertAt(int location, const elemType& insertItem) { this->length++; // ... } // ... };</code>
2. Utiliser les déclarations
Déclarer les variables héritées dans la section privée de la classe héritée :
<code class="cpp">// Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { private: using arrayListType<elemType>::length; using arrayListType<elemType>::list; public: void insertAt(int location, const elemType& insertItem) { length++; // ... } // ... };</code>
Les deux méthodes garantissent que le compilateur comprend explicitement que les variables héritées proviennent de la classe parent .
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!