c++ 다운 캐스팅 예제

클래스 기반 프로그래밍에서 다운캐스팅 또는 형식 구체화는 기본 클래스의 참조를 파생 클래스 중 하나에 캐스팅하는 작업입니다. OCaml과 같은 일부 언어는 다운캐스팅을 완전히 허용하지 않습니다. [1] 동적 캐스트의 소멸자 예제 코드를 사용하지 않고는 컴파일되지 않습니다. 이유를 설명하십시오. 사전에 감사합니다. 이 방법에서 다운캐스팅은 컴파일러가 가능한 오류를 감지하지 못하게 하고 대신 런타임 오류를 발생시킵니다. myObject를 문자열로 다운 캐스팅 (`(String)myObject`)는 myObject가 문자열 형식인 경우가 있기 때문에 컴파일 타임에 불가능했기 때문에 런타임에전달된 매개 변수가 논리적인지 여부를 알아낼 수 있습니다. myObject를 유니버설 java.lang.Object.toString(사용 하 여 컴파일 타임 문자열로 변환할 수 있지만 도움이 되지 않거나 안전하지 않은 경우 toString()의 기본 구현을 호출하는 위험이 있으며 예외 처리는 이를 방지할 수 없습니다. 예를 들어 관리자와 서기가 모두 성과 성으로 식별되고 급여가 있는지 지정할 필요가 없습니다. 당신은 그들에 대한 정보를 표시하고 자신의 급여에 보너스를 추가 할 수 있습니다.

Employee 클래스에서 이러한 속성을 한 번만 지정해야 합니다. 이 코드를 컴파일하고 실행해 보십시오: 업캐스팅 및 다운캐스팅은 C++의 중요한 부분입니다. 업캐스팅 및 다운캐스팅은 간단한 구문으로 복잡한 프로그램을 빌드할 수 있는 가능성을 제공합니다. 그것은 다형성을 사용하여 달성 될 수있다. 즉, 기본 클래스(parent class)의 변수가 파생 클래스(자식 클래스)의 값을 가지면 다운캐스팅이 가능합니다. 예. 참조와 함께 dynamic_cast를 사용할 수 있으며 실패하면 std::bad_cast 형식의 예외가 throw됩니다. 나는 공과에 그렇게하는 방법의 예를 추가했다. C++에서 런타임 형식 검사는 dynamic_cast를 통해 구현됩니다.

컴파일 타임 다운캐스팅은 static_cast에 의해 구현되지만 이 작업은 형식 검사를 수행하지 않습니다. 잘못 사용 하는 경우 정의 되지 않은 동작을 생성할 수 있습니다. 예를 들어 원을 고려합니다. 원에만 지름이 있습니다. 따라서 클래스는 다음과 같이 정의됩니다 : 우리 모두가 알다시피 파생 된 클래스 개체가 인스턴스화 될 때마다 기본 클래스 생성자가 항상 호출됩니다. 그러나 하이브리드 상속의 경우 위의 예제에서 설명한 대로 클래스 D의 인스턴스를 만든 다음 다음 생성자가 호출됩니다 : 아니요.

0saves
If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.

Comments are closed.