c++ 다운캐스팅 예제

예를 들어 원을 고려합니다. 원에만 지름이 있습니다. 따라서 클래스는 다음과 같이 정의되지만 때로는 다운 캐스트가 필요할 수 있습니다. 일반적인 예는 자식 클래스에대해서만 존재하는 비가상 함수를 호출하려는 경우입니다. 이 방법에서 다운캐스팅은 컴파일러가 가능한 오류를 감지하지 못하게 하고 대신 런타임 오류를 발생시킵니다. myObject를 문자열로 다운 캐스팅 (`(String)myObject`)는 myObject가 문자열 형식인 경우가 있기 때문에 컴파일 타임에 불가능했기 때문에 런타임에전달된 매개 변수가 논리적인지 여부를 알아낼 수 있습니다. myObject를 유니버설 java.lang.Object.toString(사용 하 여 컴파일 타임 문자열로 변환할 수 있지만 도움이 되지 않거나 안전하지 않은 경우 toString()의 기본 구현을 호출하는 위험이 있으며 예외 처리는 이를 방지할 수 없습니다. 이와 반대로 기본 클래스 포인터(참조)를 파생 클래스 포인터(참조)로 변환하는 프로세스를 다운캐스팅이라고 합니다. 명시적 형식 캐스트가 없으면 다운캐스팅이 허용되지 않습니다. 이 제한의 이유는 is-a 관계가 대부분의 경우 대칭이 아니기 때문입니다.

파생 클래스는 새 데이터 멤버를 추가할 수 있으며 이러한 데이터 멤버를 사용하는 클래스 멤버 함수는 기본 클래스에 적용되지 않습니다. 다운캐스팅에 동적 캐스트를 사용하려면 기본 클래스가 다형성이어야 합니다. 가상 함수를 추가하여 기본 클래스 사람을 수정 : 안녕하세요! 아주 좋은 튜토리얼! 그러나 나는이 진술과 혼동한다 : „또한 dynamic_cast를 사용하여 다운 캐스팅이 작동하지 않는 몇 가지 경우가 있습니다 : 1) 가상 기본 클래스. “ 내가 아는 한 이것은 사실이 아니다. 그러나 이 경우 static_cast가 불가능한 것은 사실입니다. 부모는 자식이 아니기 때문에(부모는 gotoSchool() 메서드가 필요하지 않습니다) 위의 줄에서 다운캐스팅하면 안전하지 않은 작업이 발생할 수 있습니다. 업캐스팅과 다운캐스팅 모두 오브젝트를 자체적으로 변경하지 않습니다. 업캐스팅 또는 다운캐스팅을 사용할 때는 다른 방법으로 객체에 레이블을 지정하기만 하면 됩니다. 업캐스팅의 가장 큰 장점 중 하나는 동일한 기본 클래스에서 파생된 모든 클래스에 대해 제네릭 함수를 작성하는 기능입니다.

Die Kommentarfunktion ist geschlossen.