Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greife ich auf geschützte Mitgliedsvariablen in geerbten Klassen in C-Vorlagen zu?

Wie greife ich auf geschützte Mitgliedsvariablen in geerbten Klassen in C-Vorlagen zu?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 09:23:03916Durchsuche

How to Access Protected Member Variables in Inherited Classes in C   Templates?

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:

  1. 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>
  2. 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!

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