다음을 통해 공유


중첩 된 클래스 선언

클래스는 다른 클래스의 범위 내에서 선언할 수 있습니다.이러한 클래스는 "클래스를 중첩 합니다." 라고 중첩된 클래스는 바깥쪽 클래스 범위 내에 간주 되 고 해당 범위 내에서 사용할 수 있습니다.중첩된 클래스에서 그 즉시 포함 범위 이외의 범위를 참조 하려면 정규화 된 이름을 사용 해야 합니다.

다음 예제에서는 중첩 된 클래스를 선언 하는 방법을 보여 줍니다.

// nested_class_declarations.cpp
class BufferedIO
{
public:
   enum IOError { None, Access, General };

   // Declare nested class BufferedInput.
   class BufferedInput
   {
   public:
      int read();
      int good()
      {
         return _inputerror == None;
      }
   private:
       IOError _inputerror;
   };

   // Declare nested class BufferedOutput.
   class BufferedOutput
   {
      // Member list
   };
};

int main()
{
}

BufferedIO::BufferedInput및 BufferedIO::BufferedOutput 내에서 선언 된 BufferedIO.이러한 클래스 이름은 클래스 범위 밖에 서 보이지 않는 BufferedIO.그러나 형식의 개체를 BufferedIO 모든 유형의 개체가 없기 때문에 BufferedInput 또는 BufferedOutput.

중첩 된 클래스 이름, 형식 이름, 정적 멤버 및 열거자를 포함 하는 클래스의 이름을 직접 사용할 수 있습니다.다른 클래스 멤버의 이름을 사용 하려면 포인터나 참조, 개체 이름을 사용 해야 합니다.

위 BufferedIO 예를 들어 열거형 IOError 멤버 함수에서 중첩 된 클래스에 직접 액세스할 수 있습니다 BufferedIO::BufferedInput 또는 BufferedIO::BufferedOutput함수에서와 같이, good.

[!참고]

형식 클래스 범위 내에 중첩 된 클래스를 선언합니다.생성 된 클래스의 원인에 포함 된 개체가 아닌 하지.앞의 예제에서는 두 개의 중첩 된 클래스를 선언 하지만 이러한 클래스 형식의 개체를 선언 하지 않으면.

예외 범위 표시 유형으로 중첩된 클래스 선언의 전방 선언이 함께 형식 이름으로 선언 됩니다.이 경우 정방향 선언에서 선언 된 클래스 이름을 작은 바깥쪽-클래스 범위에 정의 된 범위와 바깥쪽 클래스 외부에서 표시 됩니다.예를 들면 다음과 같습니다.

// nested_class_declarations_2.cpp
class C
{
public:
    typedef class U u_t; // class U visible outside class C scope
    typedef class V {} v_t; // class V not visible outside class C
};

int main()
{
    // okay, forward declaration used above so file scope is used
    U* pu;

    // error, type name only exists in class C scope
    u_t* pu2; // C2065

    // error, class defined above so class C scope
    V* pv; // C2065

    // okay, fully qualified name
    C::V* pv2;
}

참고 항목

참조

클래스, 구조체 및 공용 구조체