内部类
内部类就像这个类的一个成员函数,所以内部类有权访问外部类内容(包括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;
}