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 ?

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

DDD
DDDoriginal
2024-11-01 01:03:28500parcourir

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>

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>

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>

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!

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