캐스팅
C++ 언어에서는 클래스가 가상 함수를 포함하는 기본 클래스에서 파생되는 경우 해당 기본 클래스 형식에 대한 포인터를 사용하여 파생 클래스 개체에 있는 가상 함수의 구현을 호출할 수 있습니다. 가상 함수를 포함하는 클래스를 "다형 클래스"라고도 합니다.
파생 클래스에는 해당 클래스가 파생되는 모든 기본 클래스의 정의가 완전히 포함되어 있으므로 포인터를 이러한 기본 클래스에 대한 클래스 계층 구조 위로 캐스팅해도 됩니다. 기본 클래스에 포인터를 지정하면 포인터를 계층 구조 아래로 캐스팅해도 안전할 수 있습니다. 포인터가 지정 중인 개체가 실제로 기본 클래스에서 파생된 형식이면 안전합니다. 이 경우 실제 개체는 "전체 개체"라고 합니다. 기본 클래스에 대한 포인터는 전체 개체의 "하위 개체"를 가리킨다. 예를 들어 다음 그림과 같은 클래스 계층 구조를 고려해 보겠습니다.
클래스 계층 구조
C
형식의 개체는 다음 그림과 같이 시각화될 수 있습니다.
하위 개체 B 및 A 포함 클래스 C
C
클래스의 인스턴스를 제공하면 B
하위 개체 및 A
하위 개체가 있습니다. C
및 A
하위 개체를 포함한 B
의 인스턴스는 "완전한 개체"입니다.
런타임 형식 정보를 사용하면 실제로 포인터가 완전한 개체를 가리키며 해당 계층 구조에서 다른 개체를 가리키도록 안전하게 캐스팅될 수 있는지 여부를 확인할 수 있습니다. dynamic_cast 연산자를 사용하여 이러한 유형의 캐스트를 만들 수 있습니다. 이러한 연산자는 안전하게 작업하는 데 필요한 런타임 검사도 수행합니다.
비포형 형식 변환의 경우 static_cast 연산자를 사용할 수 있습니다(이 항목에서는 정적 및 동적 캐스팅 변환의 차이점과 각각을 사용하는 것이 적절한 경우를 설명합니다).
이 섹션에서는 다음 항목을 다룹니다.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기