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

 
Pavel Verveyko :
클래스의 공개 섹션에서 정적 배열 을 선언하고 생성자에서 초기화할 수 있습니까? (아래와 같이) (또는 요소별로만?)

~할 수 있다

아니면 여전히 정적 배열의 초기화를 찾고 있습니까?

 class A
{
public :
   static bool Mass[ 5 ];
               A() { ArrayPrint (Mass); }
};

static bool A::Mass[ 5 ] = { false , true , false , true , true };
//+------------------------------------------------------------------+
void OnStart ()
{
   A a;
}
//+------------------------------------------------------------------+
 
Pavel Verveyko :
클래스의 공개 섹션에서 정적 배열 을 선언하고 생성자에서 초기화할 수 있습니까? (아래와 같이) (또는 요소별로만?)

다음과 같이 다소:

 class A{
   protected :
       static int x[];
       int my[];
   public :
      A(){
         ArrayCopy (my,x);
      }   
};

int A::x[]={ 1 , 2 , 3 , 4 , 5 };

A a;
일반적으로 PLO의 이러한 빈곤은 그 탁월함을 배경으로 두드러집니다. 글쎄요, 변수와 배열이 선언될 때 평소처럼 초기화할 수 없는 이유는 무엇입니까? 나는 이론가들이 지금 내가 바보라는 것을 증명하는 많은 이론을 추진하고 있다고 확신하지만 여전히...
 
Sergey Dzyublik :

로컬 배열을 초기화하고 해당 필드 배열에 대해 ArrayCopy를 수행할 수 있습니다.

그런 발상도 있었고, 어떤 클래스도 아닌 글로벌 영역에 배치할 수도 있습니다.
더 쉽지만 모든 것이 OOP가 되길 바랍니다))

 
Dmitry Fedoseev :

다음과 같이 다소:

일반적으로 PLO의 이러한 빈곤은 그 탁월함을 배경으로 두드러집니다. 글쎄요, 변수와 배열이 선언될 때 평소처럼 초기화할 수 없는 이유는 무엇입니까? 나는 이론가들이 지금 내가 바보라는 것을 증명하는 많은 이론을 추진하고 있다고 확신하지만 여전히...

나는 정확히 같은 생각을 가지고 있습니다)) OOP를 사용하여 작성할 때마다 .

 
Pavel Verveyko :

그런 발상도 있었고, 어떤 클래스도 아닌 글로벌 영역에 배치할 수도 있습니다.
더 쉽지만 모든 것이 OOP가 되길 바랍니다))

 class CTest{
public :
   int a[ 4 ];
   CTest(){
       static int _a[]={ 1 , 2 , 3 , 4 };
       ArrayCopy (a,_a);
   }
};
 
Igor Makanu :

~할 수 있다

아마도 당신은 여전히 정적 배열의 초기화를 찾고 있습니까?

흥미로운 옵션.

"생성자가 있는 메서드"에 대한 호출입니까?

 
Pavel Verveyko :

흥미로운 옵션.

"생성자가 있는 메서드"에 대한 호출입니까?

아니요

그것이 쓰여지는 방법은 정적의 초기화입니다

초기화할 수 없는 경우 코드는 다음과 같습니다.

 class A
{
public :
   static bool Mass[ 5 ];
               A() { ArrayPrint (Mass); }
};

static bool A::Mass[ 5 ];
//+------------------------------------------------------------------+
void OnStart ()
{
   A a;
}
//+------------------------------------------------------------------+

이것은 메소드 호출이 아니라 정규화된 클래스 필드 이름 A::Mass[5];

그러나 라인을 삭제하면 컴파일러 오류가 발생합니다. 정적은 클래스 인스턴스가 생성될 때까지 메모리를 할당해야 합니다. 이것이 바로 노란색 라인이 하는 일입니다.
 
Igor Makanu :

아니요

그것이 쓰여지는 방법은 정적의 초기화입니다

초기화할 수 없는 경우 코드는 다음과 같습니다.

감사합니다. 이 줄( 정적 부울 A::질량[ 5 ]; ) 생성자에게 전송되지 않도록 하려면 어떻게 해야 합니까?

 
Pavel Verveyko :

또는 정적인 경우에만 비슷한 경우에 초기화됩니까?

위에 추가된 게시물

예, 통계는 별도로 설명해야 합니다. 여기 @fxsaberhttps://www.mql5.com/en/forum/325418/page4#comment_16116740 을 알아내는 데 도움을 주었습니다.

MQL에서 이와 같은 정적 클래스를 초기화할 수도 있습니다.


파벨 베르베코 :

감사합니다. 이 줄( 정적 부울 A::질량[ 5 ]; ) 생성자에게 전송되지 않도록 하려면 어떻게 해야 합니까?

아니요, 이것은 클래스의 스택 필드이지만 클래스의 인스턴스를 생성할 때가 아니라 미리 메모리를 할당해야 한다고 씁니다.

그리고 당신은 미래에 그것을 일반 배열로 사용할 것입니다.

질문이 일반적으로 하나의 strroic 형태로 초기화되는 경우 Sergey의 버전이 찾고 있는 것이며 단순히 정적이 필요하지 않습니다.

 
Igor Makanu :

위에 추가된 게시물

예, 통계는 별도로 설명해야 합니다. 여기 @fxsaberhttps://www.mql5.com/ru/forum/325418/page4#comment_16116740 을 알아내는 데 도움이 되었습니다.

MQL에서 이와 같은 정적 클래스를 초기화할 수도 있습니다.

감사합니다. 이제 어레이 등에 액세스할 수 있다는 것을 이해하려고 했습니다.

 int OnInit ()
{
   ArrayPrint (A::Mass);

   return ( INIT_SUCCEEDED );
}

솔직히 말해서, 우리는 OOP를 가지고 있지만 도움말에서 이것을 본 적이 없습니다. 도움이 그러한 미묘함을 설명하지 못하는 것은 유감입니다.

응답 해주신 모든 분들께 진심으로 감사드립니다!