Maison >développement back-end >C++ >Les classes internes peuvent-elles accéder aux variables privées de classe externe en C ?

Les classes internes peuvent-elles accéder aux variables privées de classe externe en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-28 21:31:14980parcourir

Can Inner Classes Access Outer Class Private Variables in C  ?

Les classes internes peuvent-elles accéder aux variables privées ?

Considérez le code C suivant :

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";

Lors de la compilation, ce le code génère une erreur : "class Outer::Inner' n'a aucun membre nommé var'". Cela soulève la question : les classes internes peuvent-elles accéder aux variables privées de la classe externe ?

Réponse :

Oui, les classes internes ont accès aux variables privées de la classe englobante . En effet, les classes internes sont amies de leurs classes englobantes.

Cependant, contrairement à Java, il n'y a pas de relation directe entre un objet de classe interne et l'objet de classe englobant. Pour établir cette connexion, vous devez l'établir manuellement.

Solution :

Le code modifié suivant connecte les objets de classe interne et externe en passant une référence à la classe externe au constructeur de classe interne :

#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();
}

Ce code élimine l'erreur de compilation et permet à la classe interne d'accéder aux variables privées de la classe externe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn