内部クラスは外側クラスのメンバにアクセスし放題!クラスはメンバ変数や関数へのアクセス権を細かく設定出来ます。これによりメンバ変数のカプセル化がはかれ、クラス機能の不正な改変を防ぐ事ができます。メンバ変数をprivateとして宣言すれば、そのクラス内部意外ではアクセスができなくなります。そのアクセス権限の壁を完璧に超えられる人がいます。それは「自分自身」です。ところが、なんと、自分以外にもう一人完全に超えられる人がいます。v);};public:Parent();~Parent();};クラスの中にクラスが宣言されているのがわかりますね。v;}親の中にいるのでスコープが連鎖しているわけです。孫クラスがあったとしても、これと同様のスコープ解決をしていくだけです。内部クラスの何が面白いのか?それは「内部クラスにしてみると、親クラスのメンバがグローバル」であるように見える事にあります。0;}何をしているか説明します。MyMainクラスはメイン関数のような役割をしています。毎フレームupdateメソッドを呼ぶ事で時間が少しずつ進むゲームのメイン関数のような働きです。MyMainクラスの中にはInner内部クラスが定義されています。その実体も持っています。MyMain::updateメソッド内ではInnerオブジェクトのupdateメソッドが呼ばれています。Inner::updateメソッドの内部がポイントです。引数に渡されたMyMainクラスが持っているprivateなvalメンバに直接アクセスできてしまっています!つまり、Innerクラスにしてみると、引数のMyMainオブジェクトのメンバが自分の知っているグローバル変数のような感覚になっているわけです。MyClassのvalメンバ変数は、もちろん外の人からは一切見えません。内部の人はアクセス自由。これは「グローバル変数のスコープ化」をしている状態です。変数を極力さわらせないのがオブジェクト指向の基本です。完全なグローバル変数はそれに逆行しているのでまずい。シングルトンオブジェクトもヘッダーをインクルードすると誰でも触れてしまうので良くはない。上のように外側をクラスでくくり、それにアクセスするクラスを内部クラスとして作ると、グローバル変数のスコープ化ができます。しなければならないわけではありません。内部クラスを延々と何百も作っていくのは明らかにおかしいです。時と場合を見計らって賢く使っていきましょう。派生クラスはもうアクセス無理!さて、内部クラスは外側クラスのメンバにアクセスし放題です。1;}};};MyMainExはMyMainを親に持つ派生クラスです。その内部で内部クラスも派生しています。InnerクラスはMyMainにアクセスできるのだから、InnerExクラスも出来そうに思いますが、実はこれはできません!外側クラスのメンバにアクセス出来るのは、あくまでも「そのクラス内で宣言されたクラスのみ」なんです。InnerExクラスはMyClassExクラスで宣言されているのでMyClassは別人、つまりprivateメンバにはアクセスできません。protectedにしてもだめです。publicメンバにだけアクセスできます。これは、当然と言えば当然です。親クラスの実装がライブラリ化などで隠蔽されているとして、派生したその内部クラスが親クラスにアクセス出来たら、カプセル化が破壊されてしまいます。ん〜、わかりますけどちょっと残念(^-^;。