在C++中,可以将类声明放在另一个类中,在另一个类中声明的类被称为嵌套类,它通过提供新的类型类作用域来避免名称混乱。包含类的成员函数可以创建和使用被嵌套类的对象;而仅当声明位于公有部分,才能在包含类的外面使用嵌套类,而且必须使用作用域解析运算符。
对类进行嵌套和包含并不同,包含意味着将类对象作为另一个类的成员,而对类进行嵌套不创建类成员,而是定义一种类型,该类型仅在包含嵌套类声明的类中有效。
class Queue
{
enum {Q_SIZE = 10};
private:
struct Node {Item item; struct Node *next;};
Node * front;
Node * rear;
int items;
const int qsize;
public:
Queue(int qs = Q_SIZE);
~Queue();
bool isempty() const;
bool isfull() const;
int queuecount() const;
bool enqueue(const Item &item);
bool dequeue(Item &item);
};
Node实际上是一个嵌套类(结构是一种其成员在默认情况下为公有的类)
嵌套类的作用域和访问权限
嵌套类的声明位置决定了嵌套类的作用域,嵌套类的公有部分、保护部分和私有部分控制了对类成员的访问。
1.作用域
如果嵌套类是在另一个类的私有部分声明的,则只有后者知道它。
如果嵌套类是在另一个类的保护部分声明的,则它对于后者来说是可见的。
如果嵌套类是在另一个类的公有部分声明的,则允许后者、后者的派生类以及外部世界使用它。
2.访问控制
类可见后,起决定作用的将是访问控制。对嵌套类访问权的控制规则与对常规类相同。