ホームページ > バックエンド開発 > C++ > 内部クラスは C の外部クラスのプライベート変数にアクセスできますか?

内部クラスは C の外部クラスのプライベート変数にアクセスできますか?

Susan Sarandon
リリース: 2024-11-28 21:31:14
オリジナル
1027 人が閲覧しました

Can Inner Classes Access Outer Class Private Variables in C  ?

内部クラスはプライベート変数にアクセスできますか?

次の C コードを考えてみましょう:

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";
ログイン後にコピー

コンパイルすると、これはコードにより、「クラス アウター::インナー' には var' という名前のメンバーがありません」というエラーが生成されます。これにより、内部クラスは外部クラスのプライベート変数にアクセスできますか?

答え:

はい、内部クラスは外側のクラスのプライベート変数にアクセスできます。 。これは、内部クラスがその周囲のクラスのフレンドであるためです。

ただし、Java とは異なり、内部クラス オブジェクトとそれを包含するクラス オブジェクトの間には直接の関係はありません。この接続を確立するには、手動で確立する必要があります。

解決策:

次の変更されたコードは、外部クラスへの参照を渡すことによって、内部クラス オブジェクトと外部クラス オブジェクトを接続します。内部クラスのコンストラクターへ:

#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();
}
ログイン後にコピー

このコードはコンパイル エラーを排除し、内部クラスが外部クラスのプライベート変数にアクセスできるようにします。クラス。

以上が内部クラスは C の外部クラスのプライベート変数にアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート