[TOC]

概述

如果一个类定义在另一个类的内部,这个内部类就叫做内部类。此时这个内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去调用内部类。外部类对内部类没有任何优越的访问权限。即说:

  • 内部类就是外部类的友元类(不需要特意在外部类中声明)。注意友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元
  • 外部类与内部类其实联系并不大,外部类无非仅仅限定了内部类类名的作用域范围。

内部类可以定义在外部类的 public、protected、private 都是可以的。

  • 如果内部类定义在 public,则可通过 外部类名::内部类名 来定义内部类的对象。
  • 如果定义在 private,则外部不可定义内部类的对象,这可实现“实现一个不能被继承的类”问题。

内部类使用

定义一个内部类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using namespace std;

class Outer {
public:
Outer() {m_outerInt = 0;}
void displayOut() { cout << m_outerInt << endl; }
private:
int m_outerInt;

// 定义内部类
public:
class Inner {
public:
Inner(){m_innerInt = 1;}
private:
int m_innerInt;
public:
void displayIn() { cout << m_innerInt << endl; }
};
// End内部类
};



int main() {
Outer out;
Outer::Inner in; // 内部类对象
out.displayOut();
in.displayIn();

getchar();
return 0;
}

内部类自动声明为外部类的友元,如果想在内部类的实例对象中中访问外部类的实例对象的数据成员,必须通过传入外部类的指针来解决,直接看代码吧: