Können innere Klassen auf private Variablen zugreifen?
Betrachten Sie den folgenden C-Code:
class Outer { class Inner { public: Inner() {} void func(); }; private: static const char* const MYCONST; int var; }; void Outer::Inner::func() { var = 1; } const char* const Outer::MYCONST = "myconst";
Beim Kompilieren dies Code generiert einen Fehler: „Klasse Outer::Inner‘ hat kein Mitglied namens var‘“. Dies wirft die Frage auf: Können innere Klassen auf private Variablen der äußeren Klasse zugreifen?
Antwort:
Ja, innere Klassen haben Zugriff auf die privaten Variablen der umschließenden Klasse . Dies liegt daran, dass innere Klassen Freunde ihrer umschließenden Klassen sind.
Im Gegensatz zu Java gibt es jedoch keine direkte Beziehung zwischen einem inneren Klassenobjekt und dem umgebenden Klassenobjekt. Um diese Verbindung herzustellen, müssen Sie sie manuell herstellen.
Lösung:
Der folgende modifizierte Code verbindet die inneren und äußeren Klassenobjekte, indem er einen Verweis auf die äußere Klasse übergibt zum Konstruktor der inneren Klasse:
#include <string> #include <iostream> class Outer { class Inner { public: Inner(Outer& x): parent(x) {} void func() { std::string a = "myconst1"; std::cout << parent.var << std::endl; if (a == 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(); }
Dieser Code beseitigt den Kompilierungsfehler und ermöglicht der inneren Klasse den Zugriff auf die privaten Variablen der äußeren Klasse.
Das obige ist der detaillierte Inhalt vonKönnen innere Klassen in C auf private Variablen der äußeren Klasse zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!