その意図は、その型のインスタンスが周囲のクラスによって所有されるだけでなく、型自体も周囲のクラスによって所有される型を作成することです。
明らかな例として、ほとんどのコンテナ タイプは、そのコンテナのタイプをiterator
ネストされたクラス (または構造体) として定義します。vector<T>::iterator
とは同様の概念を表していdeque<T>::iterator
ますが、それぞれは関連付けられたコンテナー タイプによって所有され、固有のものです。
アクセス指定子に関する限り、それらは通常の規則に従います。構造体/クラス定義を作成するprivate
と、同じクラス内の他のコードからのみ可視になります。の場合protected
、そのクラスとその子孫に表示されます。公開の場合は、誰でも見ることができます。
より具体的な例を挙げると、ビジネスのポジションについては、次のような場合があります。
class secretary {};
class executive {
class secretary {};
};
この場合、a::secretary
は「通常の」秘書であり、anexecutive::secretary
は重役秘書です。明らかに似ていますが、重役秘書は通常、非重役秘書とは少なくともいくらか異なる職務記述書を持っています。エグゼクティブ バイス プレジデントには、1 人のエグゼクティブ セクレタリーと 2 人の「通常の」セクレタリーがいる場合がありますが、下位レベルのマネージャーには、通常のセクレタリーのみが許可されており、エグゼクティブ セクレタリーは許可されていません。
実際のプログラミングでは、多くの場合、入れ子になったプライベート クラスがあります。通常の秘書とはまったく異なる重役の秘書とは異なり、これらのいくつかは、世界の他の地域では存在すらまったく知られていないものです (少なくとも、見ない限り)。もちろん、ヘッダーのプライベート部分で)。