c++ 업캐스팅 다운캐스팅 예제

아니요. 다운캐스트에 대한 개체에 대한 포인터 또는 참조를 제공하고 있습니다. 컴파일러는 해당 개체를 보고 다운캐스팅이 가능한지/적절한지 확인할 수 있습니다. 다운캐스팅은 업캐스팅을 위한 반대 프로세스입니다. 기본 클래스 포인터를 파생 클래스 포인터로 변환합니다. 다운캐스팅은 수동으로 수행해야 합니다. 명시적 형식 캐스트를 지정해야 한다는 의미입니다. C++를 사용하면 파생 클래스 포인터(또는 참조)를 기본 클래스 포인터로 처리할 수 있습니다. 이것은 업캐스팅입니다. 심하게 고려된 디자인의 일반적인 예는 Java 제네릭이 도입되기 전에 Java 컨테이너와 같은 상위 형식의 컨테이너이며, 다시 사용할 수 있도록 포함된 개체를 다운캐스팅해야 합니다.

이와 반대로 기본 클래스 포인터(참조)를 파생 클래스 포인터(참조)로 변환하는 프로세스를 다운캐스팅이라고 합니다. 명시적 형식 캐스트가 없으면 다운캐스팅이 허용되지 않습니다. 이 제한의 이유는 is-a 관계가 대부분의 경우 대칭이 아니기 때문입니다. 파생 클래스는 새 데이터 멤버를 추가할 수 있으며 이러한 데이터 멤버를 사용하는 클래스 멤버 함수는 기본 클래스에 적용되지 않습니다. 다운캐스팅은 Parent 변수에서 참조하는 값의 형식을 알고 있고 값을 매개 변수로 전달할 때 자주 사용되는 경우에 유용합니다. 아래 예제에서 메서드 objectToString 형식 문자열로 가정 되는 개체 매개 변수를 사용 합니다. 안녕하세요 알렉스! 첫 번째 예제를 컴파일할 수 없습니다. 컴파일러는 형식이 다형성이 아니라고 말합니다.

나는 IDE와 gcc로 qtcreator를 사용하고 있습니다. 이유가 될 수 있습니까? 업캐스팅을 설명하기 위해 고양이 중 하나를 `동물` 유형으로 캐스팅할 수도 있습니다. 이 cat에서 `render` 메서드를 호출하면 이름을 포함하지 않는 `Animal` 클래스 render() 메서드를 사용합니다. 파생된 클래스 개체는 항상 기본 클래스 개체로 처리될 수 있습니다. 그러나, 반대는 옳지 않다. 예를 들어 관리자는 항상 사람입니다. 그러나 사람이 항상 매니저가 되는 것은 아닙니다. 그것은 너무 서기 가 될 수 있습니다. 또한, 나는 전체 캐스팅 일에 대해 약간 혼란스러워.

따라서 파생 객체는 기본 부품과 파생 부품으로 구성됩니다. 그래서 당신은 아래이 작업을 수행 할 때, 그것은 업 캐스팅 될 것인가? 업캐스팅이란 무엇입니까? 다운캐스팅에 동적 캐스트를 사용하려면 기본 클래스가 다형성이어야 합니다. 가상 함수를 추가하여 기본 클래스 Person 수정: C++에서 런타임 형식 검사는 dynamic_cast를 통해 구현됩니다. 컴파일 타임 다운캐스팅은 static_cast에 의해 구현되지만 이 작업은 형식 검사를 수행하지 않습니다. 잘못 사용 하는 경우 정의 되지 않은 동작을 생성할 수 있습니다. 컴파일러와 런타임 링커는 세부 정보를 처리합니다. 멤버 함수가 가상인 경우 개체에 메시지를 보낼 때 업캐스팅이 관련된 경우에도 개체가 올바른 작업을 수행합니다. 파생 클래스 개체가 인스턴스화될 때마다 기본 클래스 생성자가 항상 호출된다는 것을 알고 있습니다. 그러나 하이브리드 상속의 경우, 위의 예제에서 설명한 대로 클래스 D의 인스턴스를 만들면 다음 생성자가 호출됩니다 : 예, 제안하는 것은 업캐스팅입니다.