Maison > développement back-end > C++ > le corps du texte

Pourquoi ne puis-je pas accéder aux variables membres de la classe parent dans ma classe héritée ?

DDD
Libérer: 2024-11-01 01:03:28
original
422 Les gens l'ont consulté

Why Can't I Access Parent Class Member Variables in My Inherited Class?

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&amp; insertItem);
    // ...
};</code>
Copier après la connexion

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&amp; insertItem) {
        this->length++;
        // ...
    }
    // ...
};</code>
Copier après la connexion

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&amp; insertItem) {
        length++;
        // ...
    }
    // ...
};</code>
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!