이 프로그램이 제대로 작동할까요? 테스트 셰이프 포인터 함수에서 객체를 생성하는 것이 보장된 것처럼 보이지만, "잘못된 포인터 액세스"라는 오류로 끝납니다. printf(shape.name); //ERROR (!?) 줄에서. 요점은 실제로 모양 대신 NULL 참조가 전달되었다는 것입니다. 즉, 함수 내부의 모양과 전달된 모양은 서로 다른 객체입니다! 따라서 함수를 종료한 후에도 모양은 여전히 NULL과 같고 함수 내부의 모양 포인터는 손실됩니다(스택에서 지워짐). 그래서
MQL5와 현재 MQL4의 포인터와 참조에 대해 여전히 이해하지 못합니다. 추가 코드를 제외하고 참조와 포인터로 전달하는 것의 차이점은 무엇인가요? C++에는 차이가 있지만 여기에는 무엇이 있습니까? 더 자세히 작성하는 것이 어렵지 않다면.
참조로 전달하려면 참조로 전달된 객체를 초기화해야 합니다. 포인터로 전달할 때는 이러한 제한이 없습니다:
테스트 셰이프 참조 함수를 호출할 때 셰이프가 초기화되지 않아 코드가 충돌합니다. 반면 TestShapePointer 함수 내부에서는 전달된 객체가 초기화되었는지 여부를 지속적으로 확인해야 합니다. 따라서 비경험적 규칙을 따르세요:
명심해야 할 미묘한 뉘앙스가 하나 더 있습니다. 이전 예제를 생각해 보세요:
이 프로그램이 제대로 작동할까요? 테스트 셰이프 포인터 함수에서 객체를 생성하는 것이 보장된 것처럼 보이지만, "잘못된 포인터 액세스"라는 오류로 끝납니다. printf(shape.name); //ERROR (!?) 줄에서. 요점은 실제로 모양 대신 NULL 참조가 전달되었다는 것입니다. 즉, 함수 내부의 모양과 전달된 모양은 서로 다른 객체입니다! 따라서 함수를 종료한 후에도 모양은 여전히 NULL과 같고 함수 내부의 모양 포인터는 손실됩니다(스택에서 지워짐). 그래서서로 다른 유형의 객체로 배열을 만들 수 있나요?
이 예제를 살펴봅시다:
//---
상속된 클래스의 메서드에 액세스하려면 어떻게 해야 하나요?
상속자 클래스의 메서드에 어떻게 접근하나요?
타겟 유형을 캐스팅해 보셨나요?
아니요, 처음 들어봤습니다. 어디에서 읽을 수 있나요?
일반적인 유형 변환의 예는 다음과 같습니다:
대상 유형으로 캐스팅을 시도해 보셨나요?
젠장, 그다음에 언어 보안을 얘기하는 건가요?
다형성을 사용하는 것이 더 낫지 않을까요?
이렇게 하면 됩니다: