문서에서 직접 동일한 예가 고려되고 설명됩니다. 런타임 시 동적 캐스팅은 보안 및 유효성 검사를 통과한 후에만 트리거됩니다. 각 MQL5 개체에는 런타임에 권한을 확인하기 위한 모든 메타 정보가 있습니다. 그것은 빈 C++가 아닙니다.
dynamic_cast 연산자를 사용한 동적 유형 캐스팅
클래스 포인터에만 적용할 수 있는 dynamic_cast 연산자를 사용하여 동적 유형 캐스팅의 가능성이 있습니다. 이 경우 프로그램 실행 시 유형의 정확성을 검사합니다. 이것은 dynamic_cast 연산자를 사용할 때 컴파일러가 캐스트에 사용된 데이터 유형을 확인하지 않음을 의미합니다. 포인터가 객체의 실제 유형이 아닌 데이터 유형으로 변환되는 경우 결과는 NULL입니다.
dynamic_cast<유형 ID>(표현식)
꺾쇠 괄호 안의type-id 매개변수 는 이전에 정의된 클래스 유형에 대한 포인터여야 합니다. 피연산자 유형표현식(C++과 달리)은 void를 제외한 모든 것이 될 수 있습니다.
예시:
클래스CBar { }; 클래스CFoo :공개CBar { }; 무효의시작() { C바 바; //--- *bar 포인터 유형을 *foo 포인터로 동적으로 캐스팅할 수 있습니다. CFoo *foo =dynamic_cast<CFoo *>(&bar);// 치명적인 런타임 오류가 발생하지 않습니다. 인쇄(foo);// foo=NULL //--- Bar 유형의 객체 참조를 Foo 유형의 객체로 명시적으로 캐스트하려는 시도는 금지됩니다. foo=(CFoo*)&bar;// 치명적인 런타임 오류가 발생합니다. 인쇄(foo);// 이 라인은 실행되지 않습니다. }
런타임 오류는 무엇입니까
맞습니다. 아래에서 위로 줄 수 없고 위에서 아래로만 줄 수 있습니다. 이것은 안전을 위한 것입니다.
C ++와 비교하는 것은 불가능합니다. 무엇이든 거기에 가져올 수 있습니다.
C++에서는 기본 클래스에 대한 포인터가 자식을 가리키는 경우에만 가능합니다.
나는 이것이 무엇을 의미하는지 이해하지 못하지만이 코드는 다음과 같습니다.
맞습니다. 아래에서 위로 줄 수 없고 위에서 아래로만 줄 수 있습니다. 이것은 안전을 위한 것입니다.
C ++와 비교하는 것은 불가능합니다. 무엇이든 거기에 가져올 수 있습니다.
이제 이해가 되네요 설명 감사합니다 :)
나는 이것이 무엇을 의미하는지 이해하지 못하지만이 코드는 다음과 같습니다.
맞습니다. 아래에서 위로 줄 수 없고 위에서 아래로만 줄 수 있습니다.
어떤 의미에서 기본 클래스에서 자손으로 생성하는 것은 불가능합니까?
예, 실제로 구성된 어린이가 바닥에 누워 있지 않은 경우.
맞습니다. 아래에서 위로 줄 수 없고 위에서 아래로만 줄 수 있습니다. 이것은 안전을 위한 것입니다.
네.
레나트, dynamic_cast가 무엇인지 아십니까?
틀림없이.
논의된 MQL5 코드 부분을 살펴보십시오. 기본 인스턴스가 생성된 다음 보안 시스템을 위반하여 캐스트 스피커를 통해 영웅적으로 후손으로 변환하려고 합니다. 물론 꽝입니다.
문서에서 직접 동일한 예가 고려되고 설명됩니다. 런타임 시 동적 캐스팅은 보안 및 유효성 검사를 통과한 후에만 트리거됩니다. 각 MQL5 개체에는 런타임에 권한을 확인하기 위한 모든 메타 정보가 있습니다. 그것은 빈 C++가 아닙니다.
dynamic_cast 연산자를 사용한 동적 유형 캐스팅
클래스 포인터에만 적용할 수 있는 dynamic_cast 연산자를 사용하여 동적 유형 캐스팅의 가능성이 있습니다. 이 경우 프로그램 실행 시 유형의 정확성을 검사합니다. 이것은 dynamic_cast 연산자를 사용할 때 컴파일러가 캐스트에 사용된 데이터 유형을 확인하지 않음을 의미합니다. 포인터가 객체의 실제 유형이 아닌 데이터 유형으로 변환되는 경우 결과는 NULL입니다.
dynamic_cast <유형 ID>(표현식)
꺾쇠 괄호 안의 type-id 매개변수 는 이전에 정의된 클래스 유형에 대한 포인터여야 합니다. 피연산자 유형 표현식 (C++과 달리)은 void를 제외한 모든 것이 될 수 있습니다.
예시:
클래스 CBar { };
클래스 CFoo : 공개 CBar { };
무효의 시작 ()
{
C바 바;
//--- *bar 포인터 유형을 *foo 포인터로 동적으로 캐스팅할 수 있습니다.
CFoo *foo = dynamic_cast <CFoo *>(&bar); // 치명적인 런타임 오류가 발생하지 않습니다.
인쇄 (foo); // foo=NULL
//--- Bar 유형의 객체 참조를 Foo 유형의 객체로 명시적으로 캐스트하려는 시도는 금지됩니다.
foo=(CFoo*)&bar; // 치명적인 런타임 오류가 발생합니다.
인쇄 (foo); // 이 라인은 실행되지 않습니다.
}