嵌套类
定义
一个类可以定义在另一个类的内部,被称为嵌套类,定义嵌套类的类被称为外部类。嵌套类时一个独立的类,和外层类基本没什么关系,它是一个独立的类,它的成员不属于外部类,外围类的成员也不属于该嵌套类。
作用
之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。
作用域
1、如果嵌套类声明在一个类的私有部分,则只有嵌套类的外部类可以访问;
2、如果嵌套类声明在一个类的保护部分,则只有嵌套类的外部类和外部类的派生类可以访问;
3、如果嵌套类声明在一个类的公有部分,都可以访问但是必须加上外部类的外部类作用域限制符。
访问权限
1、嵌套类名与它的外部类的对象成员名具有相同的访问权限规则,外部类对象的访问权限只有public,所以嵌套类也是一样;
2、嵌套类中说明的成员不是外部类中对象的成员,嵌套类的出现只是告诉外围类有一个这样的类型成员供外围类使用。并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的访问也同样如此,它们都遵循普通类所具有的标号访问控制。
3、嵌套类可以直接引用外围类的静态成员、类型名和枚举成员(假定这些成员是公有的)。
4、嵌套类必须声明在类的内部,但是可以定义在类的内部或者外部。
5、在外层类之外定义一个嵌套类时,必须以外层类的名字限定嵌套类的名字。
class Outer
{
public:
class Inner
{
public:
void Fun();
};
public:
Inner obj_;
void Fun()
{
cout<<"Outer::Fun...."< 局部类
类可以定义在某个函数的内部,这样的类被称为局部类,局部类定义的类型只在定义它的作用域内可见。
局部类不能使用函数作用域中的变量。
局部类已经封装在函数作用域中,通过信息隐藏进一步封装就显得没什么必要了。
可以在局部类的内部再嵌套一个类,此时,嵌套类的定义可以出现在局部类之外且与局部类相同的作用域中。



