캐스팅

C++ 언어에서는 클래스가 가상 함수를 포함하는 기본 클래스에서 파생되는 경우 해당 기본 클래스 형식에 대한 포인터를 사용하여 파생 클래스 개체에 있는 가상 함수의 구현을 호출할 수 있습니다. 가상 함수를 포함하는 클래스를 "다형 클래스"라고도 합니다.

파생 클래스에는 해당 클래스가 파생되는 모든 기본 클래스의 정의가 완전히 포함되어 있으므로 포인터를 이러한 기본 클래스에 대한 클래스 계층 구조 위로 캐스팅해도 됩니다. 기본 클래스에 포인터를 지정하면 포인터를 계층 구조 아래로 캐스팅해도 안전할 수 있습니다. 포인터가 지정 중인 개체가 실제로 기본 클래스에서 파생된 형식이면 안전합니다. 이 경우 실제 개체는 "전체 개체"라고 합니다. 기본 클래스에 대한 포인터는 전체 개체의 "하위 개체"를 가리킨다. 예를 들어 다음 그림과 같은 클래스 계층 구조를 고려해 보겠습니다.

Diagram of a class hierarchy where C derives from B, which derives from A.
클래스 계층 구조

C 형식의 개체는 다음 그림과 같이 시각화될 수 있습니다.

Diagram of Class C with subobjects B and A.
하위 개체 B 및 A 포함 클래스 C

C 클래스의 인스턴스를 제공하면 B 하위 개체 및 A 하위 개체가 있습니다. CA 하위 개체를 포함한 B의 인스턴스는 "완전한 개체"입니다.

런타임 형식 정보를 사용하면 실제로 포인터가 완전한 개체를 가리키며 해당 계층 구조에서 다른 개체를 가리키도록 안전하게 캐스팅될 수 있는지 여부를 확인할 수 있습니다. dynamic_cast 연산자를 사용하여 이러한 유형의 캐스트를 만들 수 있습니다. 이러한 연산자는 안전하게 작업하는 데 필요한 런타임 검사도 수행합니다.

비포형 형식 변환의 경우 static_cast 연산자를 사용할 수 있습니다(이 항목에서는 정적 및 동적 캐스팅 변환의 차이점과 각각을 사용하는 것이 적절한 경우를 설명합니다).

이 섹션에서는 다음 항목을 다룹니다.

참고 항목