目录
- 内部类的概念
- 内部类的特性
C++允许在类的内部定义另一个类,这个内部定义的就叫做内部类。内部类看似嵌套,但其本质是一个独立的类,仅受到外部类类域和访问权限的限制。
内部类的概念
内部类是定义在某个类(外部类)内部的类,它对外部类而言是一种强关联的类型,常用于实现某种私有的辅助结构(如节点、迭代器等)。
classA{public:classB{// 内部类public:voidfoo(constA&a){cout<<k<<endl;// 直接访问外部类静态成员cout<<a.h<<endl;// 通过对象访问非静态私有成员}};private:staticintk;inth;};intA::k=10;intmain(){A a;A::B b;// 使用 A::B 访问内部类b.foo(a);// 调用return0;}内部类的特性
- 天生友元:内部类自动成为外部类的友元类,可以访问外部类的私有成员(包括静态和非静态,但非静态需通过对象)。
- 访问限定符:内部类可以放在外部类的
public、protected或private区段,这决定了外部世界能否访问它(如上例B是public,外部可创建A::B对象)。但无论放在哪,友元关系不受影响。 - 独立性:
sizeof(外部类)的值不包含内部类的大小,内部类只是一个类型声明,不占对象空间。 - 静态成员访问:内部类可以直接访问外部类的
static成员(不需要对象或类名限定),如上例直接使用k。
内部类在C++中不算特别常用,但在一些特定场合(如封装不想暴露给全局的辅助结构,或实现与外部类紧密耦合的逻辑)是很好的选择。它的友元特性比单独声明友元类更内聚。