Heim > Backend-Entwicklung > C++ > Hauptteil

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

DDD
Freigeben: 2024-11-01 01:03:28
Original
422 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!