C++ 嵌套类

来源:互联网 发布:淘宝可以朋友代付吗 编辑:程序博客网 时间:2024/06/05 08:59

C++中,可以将类声明放在另一个类中,在另一个类中声明的类被称为嵌套类

包含类的成员函数可以创建和使用嵌套类的对象,而仅当声明位于公有部分,才能在包含类的外面使用嵌套类,且必须使用作用域解析操作符

对类进行嵌套和包含的区别:

包含:意味着将类对象作为另一个类的成员

对类进行嵌套:并不创建类成员,而是定义了一种类型,该类型仅在包含嵌套类声明的类中有效

例子:

class Queue

{

    private:

   class Node   //Node定义在Queue中的嵌套类,此处是在private私有部分定义,只有Queue类可以创建和使用Node类

   {

       public:

           Item item;

           Node *next;

           Node(const Item &i):item(i),next(0){}; //此处在类声明中定义了构造函数

   };

   .......

};

bool Queue::enqueue(const Item & item)

{

    .......

     Node *add=new Node(item);  //在Queue类的成员函数中创建和使用Node类

    .......

}

假设想在方法文件中定义构造函数,则定义必须指出Node类是在Queue类中定义的,通过作用域解析操作符完成

Queue::Node::Node(const Item &i):item(i),next(0){}

1>作用域

嵌套类的声明位置决定了嵌套类的作用域,决定了程序的哪些部分可以创建这种类的对象

嵌套类的作用域为包含它的类,若在public部分声明,在外部使用它时,必须使用类限定符

例如: 

class Team

{

    public:

     class Coach{...};

     ......

};

要在Team外面创建Coach对象,应:

Team::Coach forhire;

2>访问控制

类可见后,起决定作用的是访问控制