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

동적 캐스트의 소멸자 예제 코드를 사용하지 않으면 컴파일되지 않습니다. 이유를 설명하십시오. 사전에 감사합니다. 다운캐스팅은 업캐스팅으로 안전하지 않습니다. 파생된 클래스 개체는 항상 기본 클래스 개체로 처리될 수 있습니다. 그러나, 반대는 옳지 않다. 예를 들어 관리자는 항상 사람입니다. 그러나 사람이 항상 매니저가 되는 것은 아닙니다. 그것은 너무 서기 가 될 수 있습니다. 다운캐스팅은 업캐스팅을 위한 반대 프로세스입니다. 기본 클래스 포인터를 파생 클래스 포인터로 변환합니다.

다운캐스팅은 수동으로 수행해야 합니다. 명시적 형식 캐스트를 지정해야 한다는 의미입니다. 업캐스팅과 다운캐스팅 모두 오브젝트를 자체적으로 변경하지 않습니다. 업캐스팅 또는 다운캐스팅을 사용할 때는 다른 방법으로 객체에 레이블을 지정하기만 하면 됩니다. 이 방법에서 다운캐스팅은 컴파일러가 가능한 오류를 감지하지 못하게 하고 대신 런타임 오류를 발생시킵니다. myObject를 문자열로 다운 캐스팅 (`(String)myObject`)는 myObject가 문자열 형식인 경우가 있기 때문에 컴파일 타임에 불가능했기 때문에 런타임에전달된 매개 변수가 논리적인지 여부를 알아낼 수 있습니다. myObject를 유니버설 java.lang.Object.toString(사용 하 여 컴파일 타임 문자열로 변환할 수 있지만 도움이 되지 않거나 안전하지 않은 경우 toString()의 기본 구현을 호출하는 위험이 있으며 예외 처리는 이를 방지할 수 없습니다. 다운캐스팅에 동적 캐스트를 사용하려면 기본 클래스가 다형성이어야 합니다. 가상 함수를 추가하여 기본 클래스 Person 수정: 예, 업캐스팅을 제안하는 내용입니다. 먼저 파생 개체가 만들어지고 파생 포인터가 기본 포인터에 업캐스트됩니다.

파생 개체의 기본 부분에 있는 기본 포인터 가리키기(파생 된 개체의 나머지 부분은 여전히 존재하며, Base를 통해 직접 액세스 할 수 없습니다.) 이를 위해 가상 함수가 필요하거나 파생 된 포인터로 다시 다운 캐스트해야합니다. 개체의 파생 된 부분이 여전히 존재 하므로 개체는 여기에 슬라이스 되지 않습니다. 형식 캐스트 #1 파생 클래스(자식) 포인터에 기본 클래스 개체(부모)의 주소를 할당하기 때문에 안전하지 않습니다. 따라서 코드는 기본 클래스 개체가 gotoSchool() 메서드와 같은 파생 클래스 속성을 갖도록 예상하며 이는 false입니다. 또한 예를 들어 자식 개체에는 부모 개체가 없는 멤버 클래스가 있습니다. 업캐스팅 및 다운캐스팅은 서로 다른 데이터 형식의 간단한 캐스팅으로 이해해서는 안 됩니다. 그것은 큰 혼란으로 이어질 수 있습니다. 내 부분에 실수 — 당신은 (Visual Studio를 허용하더라도) r-값으로 비 const 참조를 초기화 할 수 없습니다. 참조가 lvalue로 초기화되고 있는지 확인하여이 작업을 해결하려면 예제를 업데이트했습니다. 업캐스팅을 설명하기 위해 고양이 중 하나를 `동물` 유형으로 캐스팅할 수도 있습니다. 이 cat에서 `render` 메서드를 호출하면 이름을 포함하지 않는 `Animal` 클래스 render() 메서드를 사용합니다. 업캐스팅을 설명하기 위해 `cat2`의 유형을 다시 `Cat`으로 변경했습니다.

거기에서, 나는 `고양이2`를 `동물`로 업캐스트했다. 지금 코드를 컴파일하면 첫 번째 고양이 (“Kitty”)의 이름이 마우스 위에 표시되지만 두 번째 고양이 (“Kat”)는 동일한 동작을 갖지 않습니다. 업캐스팅의 가장 큰 장점 중 하나는 동일한 기본 클래스에서 파생된 모든 클래스에 대해 제네릭 함수를 작성하는 기능입니다. 예제 보기: OCaml과 같은 일부 언어는 다운캐스팅을 완전히 허용하지 않습니다. [1] 다운캐스팅은 Parent 변수에서 참조하는 값의 형식을 알고 있고 값을 매개 변수로 전달할 때 자주 사용되는 경우에 유용합니다. 아래 예제에서 메서드 objectToString 형식 문자열로 가정 되는 개체 매개 변수를 사용 합니다. 업캐스팅 및 다운캐스팅은 형식 관계를 기반으로 합니다. 즉, `Animal` 형식의 데이터가 있는 경우 하위 유형인 `Dog`로 `다운캐스트`할 수 있습니다. 반대로, `개`라는 형식의 데이터가 있다면, 슈퍼타입 `애니멀`으로 `업캐스트`할 수 있습니다.

Posted in Uncategorized