15.2
15.2 嵌套类
在C++中, 可以将类声明放在另一个类中, 在另一个类中声明的类被称为嵌套类, 它通过提供新的类型类作用域来避免名称混乱。
包含类的成员函数可以创建和使用被嵌套类的对象。
仅当声明位于公有部分, 才能在包含类的外面使用嵌套类, 而且必须使用作用域解析符。
嵌套和包含并不相同。 包含意味着类对象作为另一个类的成员, 而嵌套不创建类成员, 只是定义了一种类型, 该类型仅在包含嵌套类声明的类中才有效。
结构是一种其成员在默认情况下公有的类。
C++11 可以使用nullptr表示NULL
如果想在方法文件中使用嵌套了, 应使用两次作用域解析符:
Queue::Node::Node(const item & i) : item(i), next(0);
嵌套类和访问权限
1.嵌套类的声明决定了嵌套类的作用域, 即决定了程序的哪些部分可以创建这种类的对象。
2.和其他类一样, 嵌套类的公有、保护、私有部分控制了对类成员的访问。
作用域
如果嵌套类是在另一个类中的私有部分声明的, 则之有后者知道它。对于程序的其他部分,嵌套类都是不可见的(包括派生类)。
如果嵌套类是在另一个类中的保护部分声明的, 则他对于后者来说是可见的, 但是对于外部世界是不可见的, 但是对于派生类是可见的。
如果嵌套类是在另一个类中的公有部分声明的, 则所有部分都可以使用它。 外部程序使用时必须包含类限定符。
嵌套结构和枚举的作用域与此相同。
第十七章将更全面地介绍公有枚举。(提供可供客户程序员使用的类常数)
访问控制
对嵌套类访问权的控制规则与常规类相同。
公有、保护、私有、友元
模板中的嵌套
定义类模板时, 不会因为包含嵌套出现问题。
举例:Queue