MQL5의 OOP에 대한 질문 - 페이지 43

 
Igor Makanu :

추신 : 귀하의 메시지에는 거의 항상 합리적인 곡물이 있지만, 마치 전적으로 좋은 의도가 아닌 것처럼 자료의 프레젠테이션은 물론 귀하의 비즈니스이지만 IMHO, 당신이 돕고 싶다면 - 당신이 원한다면 도와주세요 똑똑하기 위해 종종 밝혀집니다.

프레젠테이션은 당신을 생각하게 만듭니다 ... 그들은 스스로 코드에 대해 생각하기 시작했다고 썼지 만 실수를 코딩하기 전에

 
A100 :

프레젠테이션은 당신을 생각하게 만듭니다 ... 그들은 스스로 코드에 대해 생각하기 시작했다고 썼지 만 실수를 코딩하기 전에

흠 ... 글쎄 tyap 실수는 결코 쓰지 않았습니다! - 그것은 사실이다!

추신 : 주제는 무지에서 또는 자체적으로 자료를 찾을 수 없다는 사실이 아니라 저에게 흥미로운 의견을 가진 자산이 있다는 사실에서 주기적으로 지불됩니다.)

ZYZY: 커뮤니케이션 결과 - 왜 수식어를 사용해야 하는지, 왜 get/set이 필요한지 다시 생각했습니다. 개발 단계에서 시간을 절약하고 컴파일러의 도움을 능숙하게 사용하여 작성된 코드를 테스트하는 것입니다. 즉시 성공 - 여기에서 그들은 실제로 눈을 뜨고 화제의 자산이었던 한 번 더 감사합니다!

 
Koldun Zloy :

다음은 예입니다.

왜 인터페이스가 필요한지 코드에서 명확하지 않아 생략했습니다.

물론 나는 당신의 작업을 완전히 알지 못하지만 99.99 %의 확률로 필요하지 않습니다.

사악한...

 
Igor Makanu :

흠 ... 글쎄 tyap 실수는 결코 쓰지 않았습니다! - 그것은 사실이다!

추신 : 주제는 무지에서 또는 자체적으로 자료를 찾을 수 없다는 사실이 아니라 저에게 흥미로운 의견을 가진 자산이 있다는 사실에서 주기적으로 지불됩니다.)

ZYZY: 커뮤니케이션 결과 - 왜 수식어를 사용해야 하는지, 왜 get/set이 필요한지 다시 생각했습니다. 개발 단계에서 시간을 절약하고 컴파일러의 도움을 능숙하게 사용하여 작성된 코드를 테스트하는 것입니다. 즉시 성공 - 여기에서 그들은 실제로 눈을 뜨고 화제의 자산이었던 한 번 더 감사합니다!

뭔가를 배웠다니 대단합니다. 그러나 Stroustrup의 C++를 읽으면 더 많은 것을 얻을 수 있습니다.

Habré에 대한 기사와 다양한 비디오는 읽거나 보지 않는 것이 좋습니다. 거기에 아무나 씁니다. 그들은 당신을 혼란스럽게 할 뿐입니다.

 

질문이 있습니다.


버튼이 있는 패널이 있으며 각 버튼을 누르면 일부 기능이 수행됩니다. 버튼 중 하나를 눌렀을 때 호출되는 함수, 이를 Exit1 이라고 합시다. 별도의 클래스 CExit1 로 이동해야 합니다.

그러나 이러한 함수는 일부 전역 변수 와 다른 개체의 메서드를 사용합니다.

나는 큰 프로젝트에 참여하지 않았습니다. 전문가들의 의견을 듣고 싶은데 어떻게 하는게 좋을까요?

나는 종종 mq4 파일이 컴파일되면 모든 클래스와 포함 파일이 오류 없이 풀업되고 EA가 제대로 작동하도록 프로그래밍합니다. 그러나 클래스를 별도로 컴파일하면 일부 외부 변수와 함수가 클래스에 표시되지 않기 때문에 경고가 표시됩니다.

사실 질문입니다. 클래스 자체가 오류 없이 컴파일될 필요가 있습니까? EA 전역 변수의 사용된 모든 복사본, 개체에 대한 참조 등이 이미 포함되어 있다는 뜻입니까? 그렇다면 언제 하는 것이 가장 좋습니까? 상호 작용하는 개체가 많은 경우 혼동을 줄이기 위해 어떻게 정렬합니까? 프로그램이 성장하면 프로그램에 대한 청사진을 작성합니까?

당신이 당신의 물건을 어떻게 작성하고 구현하는지 공유하십시오.

 
Vasiliy Pushkaryov :

질문이 있습니다.


버튼이 있는 패널이 있으며 각 버튼을 누르면 일부 기능이 수행됩니다. 버튼 중 하나를 눌렀을 때 호출되는 함수, 이를 Exit1 이라고 합시다. 별도의 클래스 CExit1 로 이동해야 합니다.

그러나 이러한 함수는 일부 전역 변수 와 다른 개체의 메서드를 사용합니다.

나는 큰 프로젝트에 참여하지 않았습니다. 전문가들의 의견을 듣고 싶은데 어떻게 하는게 좋을까요?

나는 종종 mq4 파일이 컴파일되면 모든 클래스와 포함 파일이 오류 없이 풀업되고 EA가 제대로 작동하도록 프로그래밍합니다. 그러나 클래스를 별도로 컴파일하면 일부 외부 변수와 함수가 클래스에 표시되지 않기 때문에 경고가 표시됩니다.

사실 질문입니다. 클래스 자체가 오류 없이 컴파일될 필요가 있습니까? EA 전역 변수의 사용된 모든 복사본, 개체에 대한 참조 등이 이미 포함되어 있다는 뜻입니까? 그렇다면 언제 하는 것이 가장 좋습니까? 상호 작용하는 개체가 많은 경우 혼동을 줄이기 위해 어떻게 정렬합니까? 프로그램이 성장하면 프로그램에 대한 청사진을 작성합니까?

당신이 당신의 물건을 어떻게 작성하고 구현하는지 공유하십시오.

플랫폼에 내재된 것 이외의 전역 변수 및 상태는 악의적입니다. 그리고 모든 엔터티(클래스 그룹)는 프로토콜(인터페이스인 것)이 아닌 프로토콜에 따라 격리되고 서로 통신해야 합니다.

물론 이것은 이상적입니다 :-) 실제 생활에서 결정을 수행하고 자신을 지원합니다. 아무도 당신의 프로젝트, 아이디어 및 작업 스타일을 알지 못하기 때문입니다.

 
struct A
{
   int x,y;
};

//+------------------------------------------------------------------+
void OnStart ()
{
   A a,b,c;
   a.x = 1 ;
   a.y = 2 ;
   b = a;
   c = a;
   //b = c = a;  // 'operator=' - parameter passed as reference, variable expected
}

1. 왜 컴파일되지 않습니까?

2. operator=를 설명하고 기본 복사 연산자를 사용하는 해킹이 있습니까? .... 즉. ::= 를 호출 하는 방법

 
Igor Makanu :

1. 왜 컴파일되지 않습니까?
2. operator=를 설명하고 기본 복사 연산자를 사용하는 해킹이 있습니까? .... 즉. ::= 를 호출하는 방법

1) MQL의 기본 할당 연산자는 void 데이터 유형 을 반환합니다.
2) 다음과 같이 할 수 있습니다.

 struct A{
   int x,y;
   
   A(){}
   A( const A &a){
       this .x = a.x;
       this .y = a.y;
   }
   A operator =( const A &a){
       this .x = a.x;
       this .y = a.y;
       return a;
   }
};

void OnStart (){
   A a,b,c;
   a.x = 1 ;
   a.y = 2 ;
   b = a;
   c = a;
   b = c = a;  
}
 
Sergey Dzyublik :

1) MQL의 기본 할당 연산자는 void 데이터 유형 을 반환합니다.

동의하지 않는다:

 struct A
{
   int x[];
};
//+------------------------------------------------------------------+
A myfunc( const int size)
{
   A result;
   ArrayResize (result.x, size);
   for ( int i = 0 ; i < size; i++) result.x[i] = i + 1 ;
   return (result);
}
//+------------------------------------------------------------------+
void OnStart ()
{
   A a;
   a = myfunc( 5 );
   A b;
   b = a;             // скопировали
   b.x[ 0 ] = 99 ;       // изменили 1-й элемент, чтобы убедиться, что это копия а, а не ссылка как в C#
   ArrayPrint (a.x);
   ArrayPrint (b.x);
}
//+------------------------------------------------------------------+

2020.04.18 18:54:03.855 tst (EURUSD,H1) 1 2 3 4 5

2020.04.18 18:54:03.855 tst (EURUSD,H1) 99 2 3 4 5


명백한 기본 할당 연산자는 전체 데이터 유형을 반환하고 복사본을 만듭니다. 아니면 어떤 종류의 무효에 대해 이야기하고 있습니까?


2. 예제는 좋지만 기본 복사 연산자를 사용하여 배열 구조에서 복사하는 기능을 유지하고 싶습니다. 확인했습니다. 일반적으로 동적 배열에서 잘 작동하며 몇 가지 뉘앙스가 있지만 질문은 여전히 다른

 
Igor Makanu :

명백한 기본 할당 연산자는 전체 데이터 유형을 반환하고 복사본을 만듭니다. 아니면 어떤 종류의 무효에 대해 이야기하고 있습니까?

당신은 잘못.

이것을 반환하는 자신만의 operator=를 정의하고 차이점을 확인하십시오.

과제의 결과가 다시 할당되면 이를 확인할 수 있습니다.

 struct A
{
   int x;
   int y;
   
   A operator =( const A& a )
   {
      x = a.x;
      y = a.y;
      
       return this ;
   }
};

void OnStart ()
{
   A a,b,c;
   a.x = 1 ;
   a.y = 2 ;
   b = a;
   c = a;
   b = c = a;
}