클래스 선언을 클래스 안에서 하면 그걸 '내포 클래스'라고 부른다. 멤버 변수들이 많을 때나, 같은 이름의 다른 클래스가 있을 때, 내포 클래스를 활용하면 이름이 난잡해지는 것을 방지할 수 있다. 이와 비슷하지만 다른, 클래스 안에 클래스 객체를 생성하는 컨테인먼트도 있었다. 우리는 이미 이 코드를 써보았다.
class Queue
{
struct Node // 내포 클래스와 비슷.
{
Item item;
struct Node* next;
};
};
struct는 디폴트가 public이기 때문에 내포 클래스와 비슷하나 그 기능이 없다. 일단 생성자가 없다. 생성자를 만들어보자.
class Queue
{
public:
class Node // 내포 클래스와 비슷.
{
public:
Item item;
Node* next;
Node(const Item& i)
: item(i), next(nullptr)
{}
};
};
이런 식으로 만드면 된다. 그리고 내포 클래스가, 내포 클래스를 담고 있는 클래스(제 2클래스라 부르겠다.)와 범위 연산자를 사용해서 호출하면 된다. 예를 들어 위의 코드에서는 Queue::Node node; 이런 식으로 하면 된다. 접근 제한자는 기존과 마찬가지로 적용된다. 그래서 내포 클래스의 멤버들은 public 영역 안에 선언하는 게 좋다. 왜? private로 선언하면, 제 2클래스에서 접근할 수가 없기 때문이다.