네. 그렇게 직접 캐스팅하는 것은 좋지 않습니다. 이 목적을 위해 특별히 dynamic_cast가 있는데, 여기서 완전히 올바르게 캐스팅 할 수 없으며 암시적이고 심각한 오류의 잠재적 인 소스입니다. 그리고 심각성 측면에서 볼 때 안전하지 않은 포인터와 참조보다 훨씬 낫지 않습니다.
문제는 상속자 클래스인 CChartObjectRectLabel, CChartObjectButton 및 CChartObjectEdit에는 액세스해야 하는 고유한 메서드가 있다는 것입니다. 그리고 표준 라이브러리의 기본 클래스 CChartObject에는 동일한 가상 메서드가 없습니다.
TheXpert: 네. 이렇게 직접 캐스팅하는 것은 정통적이지 않습니다. 플러스에는 특별히이 목적을 위해 dynamic_cast가 있으며, 여기에서는 완전히 올바르게 캐스팅 할 수 없으며 암시 적이고 심각한 오류의 잠재적 인 원인이됩니다. 그리고 진지하게 말하면 안전하지 않은 포인터와 참조보다 훨씬 낫지 않습니다.
예, 여기 포럼에서 질문하기 전에 인터넷에서 C ++에 dynamic_cast 연산자 ( 동적 데이터 식별 메커니즘)가 있다는 것을 발견했습니다.
이제 위의 링크를보고 있습니다:
// 동적 데이터 유형 식별 메커니즘은 다형성 데이터 유형에 대해서만 사용할 수 있습니다. // 클래스(즉, 가상 멤버 함수를 하나 이상 포함하는 클래스)
그래서 그것은 필수 조건입니까? 그리고 기본 클래스에 가상 메서드가 없으면 dynamic_cast가 작동하지 않습니까?
보안 허점을 찾았나요? )
다형성을 사용하는 것이 더 낫지 않을까요?
대략 그렇습니다:
문제는 상속자 클래스인 CChartObjectRectLabel, CChartObjectButton 및 CChartObjectEdit에는 액세스해야 하는 고유한 메서드가 있다는 것입니다. 그리고 표준 라이브러리의 기본 클래스 CChartObject에는 동일한 가상 메서드가 없습니다.
위의 예시에서...
메서드에 액세스하는 방법은 무엇입니까?
...다음과 같이 밝혀졌습니다:
네. 이렇게 직접 캐스팅하는 것은 정통적이지 않습니다. 플러스에는 특별히이 목적을 위해 dynamic_cast가 있으며, 여기에서는 완전히 올바르게 캐스팅 할 수 없으며 암시 적이고 심각한 오류의 잠재적 인 원인이됩니다. 그리고 진지하게 말하면 안전하지 않은 포인터와 참조보다 훨씬 낫지 않습니다.
예, 여기 포럼에서 질문하기 전에 인터넷에서 C ++에 dynamic_cast 연산자 ( 동적 데이터 식별 메커니즘)가 있다는 것을 발견했습니다.
이제 위의 링크를보고 있습니다:
그래서 그것은 필수 조건입니까? 그리고 기본 클래스에 가상 메서드가 없으면 dynamic_cast가 작동하지 않습니까?
추신>>> 여기에서 dynamic_cast (MSDN)에 대해 자세히 읽고 있습니다.
젠장, 그다음에 언어 안전성에 대해 이야기하는 건가요?
아마 C/C++에서처럼 무엇이든 자유롭게 캐스팅할 수 있다고 생각하실 겁니다.
그렇지 않으며 보안에는 아무런 문제가 없습니다.
C/C++에서처럼 무엇이든 자유롭게 캐스팅할 수 있다고 생각할 수 있습니다.
그렇지 않으며 안전에는 아무런 문제가 없습니다.
나는 우연히 이 오류가 발생했고, 이는 당신의 말을 확인하는 것 같습니다. )
안전에는 아무런 문제가 없습니다.
아니요, 컴파일 타임에 dynamic_cast를 확인하는 것은 불가능합니다.
위의 코멘트는 런타임에 캐스팅 검사 결과를 보여줍니다.
고스트의 경우 누가 누구인지 정확히 알 수 있기 때문에 매우 엄격하며 RTTI 메커니즘에서 작동합니다.
위의 댓글은 폭언에 대한 캐스팅 확인 결과를 보여줍니다.