写在前面
嵌套类
函数的嵌套定义是否可以
主要内容
什么是嵌套类
在一个类中定义的类被称为嵌套类,定义嵌套类的类被称为外部类。
为什么使用嵌套类
对类进行嵌套通常是为了帮助实现另一个类,并避免名称冲突。
往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。
class A
{
public:
struct B{... };
...
};
嵌套类的声明位置决定了嵌套类的作用域,即它决定了程序的那部分可以创建嵌套类的对象。
如果嵌套类声明在一个类的私有部分,则只有嵌套类的外部类可以知道它。
如果嵌套类声明在一个类的保护部分,对于后者是可见的,对于外界是不可见的。派生类知道该嵌套类,并且可以直接创建这种类型的对象。
如果嵌套类声明在一个类的公有部分,则允许后者,后者的派生类以及外部世界使用。然后在外部使用时,必须加上外部类的外部类作用域限制符。
外界使用B的时候,必须A::B instance;
注意
但它是一个独立的类,基本上与外围类不相关。它的成员不属于外围类,同样,外围类的成员也不属于该嵌套类。嵌套类的出现只是告诉外围类有一个这样的类型成员供外围类使用。并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的访问也同样如此,它们都遵循普通类所具有的标号访问控制。
什么是局部类
类也可以定义在函数体内 这样的类被称为局部类(local class), 局部类只在定义它的局部域内可见。
与嵌套类不同的是,在定义该类的局部域外没有语法能够引用局部类的成员。
因此,局部类的成员函数必须被定义在类定义中。
在实际中,这就把局部类的成员函数的复杂性限制在几行代码中,否则,对读者来说,代码将变得很难理解。
扩展
c++是不支持嵌套函数定义的,也就是说在函数内部定义函数是不可行的。
具体分析不在这里阐述 可看我另一篇博客。