Loading…

c++ 업캐스팅 예제

다운캐스팅은 업캐스팅으로 안전하지 않습니다. 파생된 클래스 개체는 항상 기본 클래스 개체로 처리될 수 있습니다. 그러나, 반대는 옳지 않다. 예를 들어 관리자는 항상 사람입니다. 그러나 사람이 항상 매니저가 되는 것은 아닙니다. 그것은 너무 서기 가 될 수 있습니다. 가상 함수를 사용하여 업캐스팅을 사용하는 방법에 대한 예제는 “C++ 다형성” 항목에 설명되어 있습니다. 파생 클래스 개체가 인스턴스화될 때마다 기본 클래스 생성자가 항상 호출된다는 것을 알고 있습니다. 그러나 하이브리드 상속의 경우, 위의 예제에서 설명한 대로 클래스 D의 인스턴스를 만드는 경우 다음 생성자가 호출됩니다 : C ++는 파생 된 클래스 포인터 (또는 참조)를 기본 클래스 포인터로 처리 할 수 있습니다. 이것은 업캐스팅입니다. 컴파일러와 런타임 링커는 세부 정보를 처리합니다. 멤버 함수가 가상인 경우 개체에 메시지를 보낼 때 업캐스팅이 관련된 경우에도 개체가 올바른 작업을 수행합니다.

내 부분에 실수 — 당신은 (Visual Studio를 허용하더라도) r-값으로 비 const 참조를 초기화 할 수 없습니다. 참조가 lvalue로 초기화되고 있는지 확인하여이 작업을 해결하려면 예제를 업데이트했습니다. 업캐스팅의 가장 큰 장점 중 하나는 동일한 기본 클래스에서 파생된 모든 클래스에 대해 제네릭 함수를 작성하는 기능입니다. 예를 들어 보기 : 또한, 나는 전체 캐스팅 일에 대해 약간 혼란스러워합니다. 따라서 파생 객체는 기본 부품과 파생 부품으로 구성됩니다. 그래서 당신은 아래이 작업을 수행 할 때, 그것은 업 캐스팅 될 것인가? 업캐스팅이란 무엇입니까? 안녕하세요, 저자, 동적 캐스트를 사용하는 좋은 예가 있습니다. 레이캐스트를 수행해야 하는 게임을 작성할 때 플레이어 앞의 게임 오브젝트가 상호 작용할 수 있는 개체인지 확인합니다. 실패하면 상호 작용할 수 없는 일반 게임 오브젝트이며 아무 일도 일어나지 않습니다. 그러나 성공하면 상호 작용할 수있는 객체를 저장하고 상호 작용합니다! 여기서 Interactable은 가상 상호 작용() 함수가 있는 추상 클래스일 뿐이며 파생 된 클래스는 실제로 수행하는 작업을 구현해야하므로 여기에서는 상호 작용 가능한 픽업 또는 깨지기 쉬운 개체 또는 무엇이든 논의할 필요가 없습니다.

상호 작용()이라고 부르면 호출할 적절한 함수를 찾을 수 있습니다.