C のプライベート変数にアクセスする内部クラス
C では、内部クラスには、外側のクラスのプライベート メンバーにアクセスする独自の機能があります。次の例を考えてみましょう。
class Outer { class Inner { public: Inner() {} void func(); }; private: static const char* const MYCONST; int var; };
この例では、内部クラスが外部クラス内で定義されています。従来のスコープ規則によれば、Outer の var メンバー変数は Inner からアクセスできないようにする必要があります。ただし、C では、内部クラスは本質的に、それを囲んでいるクラスのフレンドです。
その結果、Outer::Inner 型のオブジェクトは、Outer のプライベート メンバー変数にアクセスできます。ただし、このアクセスは内部クラスのスコープ内でのみ許可されることに注意することが重要です。
この概念をさらに説明するために、内部クラスの func() メソッドを次のように変更してみましょう。
void Outer::Inner::func() { var = 1; }
ここで、このコードをコンパイルしようとすると、「class external::Inner」に「var」という名前のメンバーが存在しないことを示すエラー メッセージが表示されます。これは、内部クラスがプライベート メンバーにアクセスできる一方で、外側のクラスとのメンバー関係を継承しないためです。
内部クラス内で適切なメンバー関係を確立するには、次の例に示すように、囲んでいるクラス:
class Outer { class Inner { public: Inner(Outer& x): parent(x) {} void func() { std::cout << parent.var << std::endl; } private: Outer& parent; }; public: Outer() : i(*this), var(4) {} void func() { i.func(); } private: Inner i; int var; }; int main() { Outer o; o.func(); }
この例では、内部クラスのコンストラクターは外部クラスへの参照を引数として受け取ります。これにより、Outer::Inner 型のオブジェクトが親参照を介して、Outer のプライベート メンバーにアクセスできるようになります。
以上がC の内部クラスは、どのようにして外側のクラスのプライベート メンバーにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。