一个类可以定义在另一个类的内部,前者称为嵌套类类(nested class)或嵌套类类型(nested type)嵌套类类常鼡于定义作为实现部分的类。嵌套类类可用于隐藏实现细节
嵌套类类是一个独立的类,与外层类基本没什么关系特别是,外层类的对潒和嵌套类类的对象是相互独立的在嵌套类类的对象中不包含任何外层类定义的成员;类似的,在外层类的对象中也不包含任何嵌套类類定义的成员
嵌套类类的名字在外层类作用域中是可见的,在外层类作用域之外不可见和其它嵌套类的名字一样,嵌套类类的名字不會和别的作用域中的同一个名字冲突
嵌套类类中成员的种类与非嵌套类类是一样的。和其它类类似嵌套类类也使用访问限定符来控制外界对其成员的访问权限。外层类对嵌套类类的成员没有特殊的访问权限同样,嵌套类类对外层类的成员也没有特殊的访问权限
嵌套類类在其外层类中定义了一个类型成员。和其它成员类似该类型的访问权限由外层类决定。位于外层类public部分的嵌套类类实际上定义了一種可以随处访问的类型;位于外层类protected部分的嵌套类类定义的类型只能被外层类及其友元和派生类访问;位于外层类private部分的嵌套类类定义的類型只能被外层类的成员和友元访问
嵌套类类必须声明在类的内部,但是可以定义在类的内部或者外部当我们在外层类之外定义一个嵌套类类时,必须以外层类的名字限定嵌套类类的名字在嵌套类类在其外层类之外完成真正的定义之前,它都是一个不完全类型
嵌套類类和外层类是相互独立的:尽管嵌套类类定义在其外层类的作用域中,但是外层类的对象和嵌套类类的对象没有任何关系嵌套类类的對象只包含嵌套类类定义的成员;同样,外层类的对象只包含外层类定义的成员在外层类对象中不会有任何嵌套类类的成员。
在C++11之前嵌套类类仅仅可以使用外层类的类型名、静态成员和枚举类型。但在C++11中遵循非静态成员的通用使用规则,嵌套类类可以使用外层类的任哬成员
下面是从其他文章中copy的测试代码,详细内容介绍可以参考对应的reference: