Vorlagen: Sichtbarkeit von Mitgliedsvariablen der übergeordneten Klasse in geerbten Klassen
In C-Vorlagen sind Mitgliedsvariablen einer übergeordneten Klasse möglicherweise nicht sichtbar standardmäßig geerbte Klassen. Dies kann beim Zugriff auf diese Variablen zu Kompilierungsfehlern führen.
Betrachten Sie das folgende Beispiel:
<code class="cpp">template <class elemType> class arrayListType { protected: elemType *list; int length; }; template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { void insertAt(int, const elemType&); // Function that uses 'list' and 'length' };</code>
In der geerbten Klasse unorderedArrayListType führt der direkte Zugriff auf die Liste und Länge der geschützten Variablen zu Fehlern wie z da „‚Länge‘ in diesem Bereich nicht deklariert wurde“. Um dieses Problem zu lösen, müssen wir diese Variablen explizit innerhalb der abgeleiteten Klasse deklarieren.
Es gibt zwei Hauptansätze dafür:
Verwenden Sie „this ->" Präfix:
Stellen Sie jeder Mitgliedsvariablen dieses-> voran, z. B.:
<code class="cpp">void insertAt(int location, const elemType& insertItem) { for (int i = this->length; i > location; i--) this->list[i] = this->list[i - 1]; this->list[location] = insertItem; this->length++; }</code>
Verwendungsdeklarationen:
Fügen Sie Deklarationen für die Mitgliedsvariablen in den privaten Abschnitt der abgeleiteten Klasse ein, z. B.:
<code class="cpp">class unorderedArrayListType: public arrayListType<elemType> { private: using arrayListType<elemType>::length; // Declare 'length' explicitly using arrayListType<elemType>::list; // Declare 'list' explicitly public: void insertAt(int, const elemType&); };</code>
Das obige ist der detaillierte Inhalt vonWie greife ich auf geschützte Mitgliedsvariablen in geerbten Klassen in C-Vorlagen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!