c++ 다운캐스팅 예제

예를 들어 원을 고려합니다. 원에만 지름이 있습니다. 따라서 클래스는 다음과 같이 정의됩니다 : 잘못 고려 된 디자인의 인기있는 예는 Java 제네릭이 도입되기 전에 Java 컨테이너와 같은 상위 형식의 컨테이너입니다. 다시. 관리자와 서기는 항상 직원입니다. 또한, 직원은 사람입니다. 따라서 관리자와 서기도 인물입니다. 업캐스팅과 다운캐스팅을 배우기 전에 이해해야 합니다. C++에서 런타임 형식 검사는 dynamic_cast를 통해 구현됩니다.

컴파일 타임 다운캐스팅은 static_cast에 의해 구현되지만 이 작업은 형식 검사를 수행하지 않습니다. 잘못 사용 하는 경우 정의 되지 않은 동작을 생성할 수 있습니다. 동적 캐스트의 소멸자 예제 코드를 사용하지 않으면 컴파일되지 않습니다. 이유를 설명하십시오. 사전에 감사합니다. 즉, 기본 클래스(parent class)의 변수가 파생 클래스(자식 클래스)의 값을 가지면 다운캐스팅이 가능합니다. 파생 클래스 개체가 인스턴스화될 때마다 기본 클래스 생성자가 항상 호출된다는 것을 알고 있습니다. 그러나 하이브리드 상속의 경우 위의 예제에서 설명한 대로 클래스 D의 인스턴스를 만든 다음 생성자 다음에 호출됩니다. 일반적인 예는 자식 클래스에대해서만 존재하는 비가상 함수를 호출하려는 경우입니다. 내 부분에 실수 — 당신은 (Visual Studio를 허용하더라도) r-값으로 비 const 참조를 초기화 할 수 없습니다. 참조가 lvalue로 초기화되고 있는지 확인하여이 작업을 해결하려면 예제를 업데이트했습니다. 가상 함수를 사용하여 업캐스팅을 사용하는 방법에 대한 예제는 “C++ 다형성” 항목에 설명되어 있습니다.

안녕하세요 알렉스! 첫 번째 예제를 컴파일할 수 없습니다. 컴파일러는 형식이 다형성이 아니라고 말합니다. 나는 IDE와 gcc로 qtcreator를 사용하고 있습니다. 이유가 될 수 있습니까? OCaml과 같은 일부 언어는 다운캐스팅을 완전히 허용하지 않습니다. [1] 예, 참조와 함께 dynamic_cast를 사용할 수 있으며 실패하면 std::bad_cast 형식의 예외를 throw합니다. 나는 공과에 그렇게하는 방법의 예를 추가했다. 다운캐스팅은 Parent 변수에서 참조하는 값의 형식을 알고 있고 값을 매개 변수로 전달할 때 자주 사용되는 경우에 유용합니다. 아래 예제에서 메서드 objectToString 형식 문자열로 가정 되는 개체 매개 변수를 사용 합니다. 아니요.

다운캐스트에 대한 개체에 대한 포인터 또는 참조를 제공하고 있습니다. 컴파일러는 해당 개체를 보고 다운캐스팅이 가능한지/적절한지 확인할 수 있습니다. 예를 들어 관리자와 서기가 모두 성과 성으로 식별되고 급여가 있는지 지정할 필요가 없습니다. 당신은 그들에 대한 정보를 표시하고 자신의 급여에 보너스를 추가 할 수 있습니다.

Condividi
Questo articolo è stato pubblicato in Senza categoria . Bookmark permalink .
error

Ti piace quello che facciamo? Ti prego, spargi la voce!