Heim > Backend-Entwicklung > C++ > Können innere Klassen in C auf private Variablen der äußeren Klasse zugreifen?

Können innere Klassen in C auf private Variablen der äußeren Klasse zugreifen?

Susan Sarandon
Freigeben: 2024-11-28 21:31:14
Original
1042 Leute haben es durchsucht

Can Inner Classes Access Outer Class Private Variables in C  ?

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";
Nach dem Login kopieren

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&amp; 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&amp;  parent;
    };

    public:
        Outer()
            :i(*this)
            ,var(4)
        {}
        Outer(Outer&amp; 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();
}
Nach dem Login kopieren

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!

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