Heim > Backend-Entwicklung > C++ > Wie können innere Klassen in C auf private Mitglieder ihrer umschließenden Klasse zugreifen?

Wie können innere Klassen in C auf private Mitglieder ihrer umschließenden Klasse zugreifen?

Patricia Arquette
Freigeben: 2024-12-08 06:51:14
Original
240 Leute haben es durchsucht

How Can Inner Classes in C   Access Private Members of Their Enclosing Class?

Innere Klassen greifen auf private Variablen in C zu

In C haben innere Klassen die einzigartige Fähigkeit, auf private Mitglieder der umschließenden Klasse zuzugreifen. Betrachten Sie das folgende Beispiel:

class Outer {

    class Inner {
    public:
        Inner() {}
        void func();
    };

private:
    static const char* const MYCONST;
    int var;
};
Nach dem Login kopieren

In diesem Beispiel ist die Inner-Klasse innerhalb der Outer-Klasse definiert. Gemäß den herkömmlichen Bereichsregeln sollte die var-Mitgliedsvariable von Outer für Inner nicht zugänglich sein. In C sind innere Klassen jedoch von Natur aus Freunde ihrer umschließenden Klasse.

Daher können Objekte vom Typ Outer::Inner auf die privaten Mitgliedsvariablen von Outer zugreifen. Es ist jedoch wichtig zu beachten, dass dieser Zugriff nur im Rahmen der inneren Klasse gewährt wird.

Um dieses Konzept weiter zu veranschaulichen, ändern wir die func()-Methode der inneren Klasse wie folgt:

void Outer::Inner::func() {
    var = 1;
}
Nach dem Login kopieren

Wenn wir nun versuchen, diesen Code zu kompilieren, wird eine Fehlermeldung angezeigt, die besagt, dass „class Outer::Inner“ kein Mitglied mit dem Namen „var“ hat. Dies liegt daran, dass innere Klassen zwar Zugriff auf private Mitglieder haben, aber keine Mitgliedsbeziehung mit der umschließenden Klasse erben.

Um eine ordnungsgemäße Mitgliedsbeziehung innerhalb der inneren Klasse herzustellen, müssen wir manuell einen Verweis auf erstellen umschließende Klasse, wie im folgenden Beispiel gezeigt:

class Outer
{
    class Inner
    {
        public:
            Inner(Outer& x): parent(x) {}
            void func()
            {
                std::cout << parent.var << std::endl;
            }
        private:
            Outer& parent;
    };

    public:
        Outer() : i(*this), var(4) {}
        void func()
        {
            i.func();
        }
    private:
        Inner i;
        int var;
};

int main()
{
    Outer o;
    o.func();
}
Nach dem Login kopieren

In diesem Beispiel verwendet der Konstruktor der inneren Klasse einen Verweis auf die äußere Klasse als Argument. Dadurch können Objekte vom Typ Outer::Inner über die übergeordnete Referenz auf die privaten Mitglieder von Outer zugreifen.

Das obige ist der detaillierte Inhalt vonWie können innere Klassen in C auf private Mitglieder ihrer umschließenden 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage