C++ 内部类(嵌套类)

内部类

内部类就像这个类的一个成员函数,所以内部类有权访问外部类内容(包括private内容)。但是内部类就相当于在一个作用域内定义了一个类,这个作用域内的其他变量是无权访问这个类的。

class Out{
   
public : 
  void Fun () 
  {
       nested object; // 这个函数不能通过
       object.b_ = 1;
  }
private:
   class nested{
     void Fun2()
     {
          Out object;
          object._a = 1; // 这个函数可以编译过通过
     }
     int b_;
   }
     int a_;
}

内部类中模板的妙用

从下面的模板类的Demo可以看出,在一个模板类中,我们定义一个具体类型的内部类,它却可以直接使用模板类的模板类型。这样好处在于当我们在写这个模板类的时候,当有用到内部类的地方,统一不在需要 内部类<T> 这种方式具现化它,这样十分方便。

template<typename Key>
class SkipList {
  private:
    struct SkipNode;
  public:
    SkipList()
     {}
    
    Key PrintHead() 
    {
       return PutKey(head_);
    }
    
    Key PutKey(SkipNode node);
  private:
    SkipNode head_;
};
template<typename Key>
class SkipList<Key>::SkipNode {
  public:
    Key key_;
    SkipNode()
     :key_(Key())
    {}
};
template<typename Key>
Key SkipList<Key>::PutKey(typename SkipList<Key>::SkipNode node) {
  cout << node.key_ << endl;
}

内部类前置声明

c++不允许内部类型的前置声明,这个内部类型包括 内部类 与 内部typedef类型

 class Container::Iterator;
 void Fun(Container::Iterator iter)
 {
   // 编译报错
 } 
class Container {
 class Iterator{
 }
}
2 :
 class Container::Iterator;
 void Fun(Container::Iterator iter)
 {
   // 编译报错
 } 
class CC_Iterator{
 }
class Container {
 typedef CC_Iterator Iterator;
}
    原文作者:sdoyuxuan
    原文地址: https://blog.csdn.net/sdoyuxuan/article/details/80942991
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞