Können innere Klassen auf private Variablen zugreifen?
In diesem Codebeispiel wird eine innere Klasse, Inner, innerhalb einer äußeren Klasse, Outer, definiert . Wenn eine Instanz von Inner erstellt wird, wird erwartet, dass sie Zugriff auf die private Mitgliedsvariable var der Outer-Klasse hat. Beim Kompilieren tritt jedoch ein Fehler auf, der besagt, dass Inner kein Mitglied namens var hat.
Innere Klassen und Mitgliedszugriff
Eine innere Klasse in C wird als Freund betrachtet seiner äußeren Klasse. Als Freund hat eine innere Klasse Zugriff auf alle Mitglieder der äußeren Klasse, einschließlich privater Mitglieder. Daher sollten Instanzen von Inner auf die private Variable var von Outer zugreifen können.
Das Problem und die Lösung
Der Fehler ergibt sich aus dem Fehlen einer Verbindung zwischen Instanzen von Inner und Instanzen von Outer. In Java gibt es eine implizite Eltern-Kind-Beziehung zwischen inneren Klassen und ihren umschließenden Klassen. In C muss diese Beziehung jedoch explizit definiert werden.
Um das Problem zu beheben, muss ein Verweis auf die äußere Klasse an den Konstruktor der inneren Klasse übergeben werden. Dadurch erhält die innere Klasse den notwendigen Kontext, um auf die Mitglieder der äußeren Klasse zuzugreifen.
Hier ist ein Beispiel, das zeigt, wie die Eltern-Kind-Verbindung hergestellt wird und Inner den Zugriff auf die private Variable var von Outer ermöglicht:
#include <string> #include <iostream> class Outer { public: class Inner { public: Inner(Outer& x): parent(x) {} // Pass a reference to the outer class void func() { std::string a = "myconst1"; std::cout << parent.var << std::endl; if (a == Outer::MYCONST) std::cout << "string same" << std::endl; else std::cout << "string not same" << std::endl; } private: Outer& parent; }; public: Outer(): i(*this), var(4) {} Outer(Outer& other): i(other), var(22) {} void func() { i.func(); } private: static const char* const MYCONST; Inner i; int var; }; const char* const Outer::MYCONST = "myconst"; int main() { Outer o1; Outer o2(o1); o1.func(); o2.func(); return 0; }
Dieser überarbeitete Code ermöglicht Inner den Zugriff auf var, da der Konstruktor von Inner eine Eltern-Kind-Beziehung zwischen Inner und der Outer-Instanz herstellt, die ihn erstellt hat.
Das obige ist der detaillierte Inhalt vonKönnen innere Klassen in C auf private Mitglieder ihrer äußeren Klasse zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!