包含类的成员函数可以创建和使用被嵌套类的对象,而且当声明位于公有部分,才能在包含类的外卖使用嵌套类,而且必须使用作用域解析运算符。对类进行嵌套定义了一种类型,该类型仅在包含嵌套类声明的类中有效。
对类进行嵌套通常是为了帮助实现另一个类,并避免名称冲突。
1. 嵌套类和访问权限
有两种访问权限适合于嵌套类。首先,嵌套类的声明位置决定了嵌套类的作用域,即它决定了程序的哪些部分可以创建这种类的对象。其次,和其他的类一样,嵌套类的公有部分、保护部分和私有部分控制了对类成员的访问。在哪些地方可以使用嵌套类以及如何使用嵌套类,取决于作用域和访问控制。
1.1 作用域
如果嵌套类是在另一个类的私有部分声明的,则只有后者知道它。
如果嵌套类是在另一个类的保护部分声明的,则它对于后者来说是可见的,但是对于外部世界是不可见的。然而这种情况下,派生类将知道嵌套类,并可以直接创建这种类型的对象。
如果嵌套类是在另一个类的公有部分声明的,则允许后者、后者的派生类以及外部世界使用它,因为它是公有的。然而,由于嵌套类的作用域为包含它的类,因此在外部世界使用它时,必须使用类限定符。例如:
class Team
{
public:
class Coach {};
// ...
};
//外部世界使用它:
Team::Coach forhire; // create a Coach object outside the Team class
嵌套结构和枚举的作用域与此相同。很多程序员都用公有枚举来提供客户程序员使用