Heim  >  Artikel  >  Backend-Entwicklung  >  Warum kann ich in meiner geerbten Klasse nicht auf die Mitgliedsvariablen der übergeordneten Klasse zugreifen?

Warum kann ich in meiner geerbten Klasse nicht auf die Mitgliedsvariablen der übergeordneten Klasse zugreifen?

DDD
DDDOriginal
2024-11-01 01:03:28424Durchsuche

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

Mitgliedsvariablen der übergeordneten Klasse sind in der geerbten Klasse nicht sichtbar

Beim Erben einer Klasse als Vorlage sind geschützte Variablen der übergeordneten Klasse möglicherweise nicht sichtbar in der geerbten Klasse sichtbar. Dies kann beim Zugriff auf diese Variablen in der geerbten Klasse zu Kompilierungsfehlern führen.

Betrachten Sie das folgende Beispiel:

<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>

Wenn der Compiler auf die Klasse „unorderedArrayListType“ stößt, versucht er, die Funktion „insertAt“ zu validieren . Die in der Klasse arrayListType deklarierten Längen- und Listenvariablen können jedoch nicht gefunden werden. Dies führt zu Kompilierungsfehlern.

Lösung

Um dieses Problem zu beheben, gibt es zwei mögliche Lösungen:

1. Stellen Sie this-> als Präfix voran

Den geerbten Variablen wird this-> vorangestellt. Gibt explizit an, dass sie zur übergeordneten Klasse gehören:

<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. Deklarationen verwenden

Deklarieren der geerbten Variablen im privaten Abschnitt der geerbten Klasse:

<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>

Beide Methoden stellen sicher, dass der Compiler explizit versteht, dass die geerbten Variablen von der übergeordneten Klasse stammen .

Das obige ist der detaillierte Inhalt vonWarum kann ich in meiner geerbten Klasse nicht auf die Mitgliedsvariablen der übergeordneten Klasse zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn