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

 
Igor Makanu :

예, 이것이 더 나은 솔루션입니다! 한 가지 방법을 덜 사용하기 위해

하나의 새 항목만 OnStart에 남아 있어야 합니다.
 
Koldun Zloy :

1. 이 함수를 이중으로 호출하는 것은 문제가 없습니다.

2. 정적 함수 사용에 반대하는 사람들이 조금도 논평을 하지 않는 것이 귀찮지 않습니까?

누군가의 비디오를 보지 말고 책을 읽는 것이 좋습니다.

비디오 작가   https://youtu.be/lfdAwl3-X_c and https://youtu.be/zME4SOCHT0I 좋은 일만 가득하길 ..... 한 주 내내 불안한 일, 앉아서 하지 않는 일들 생각하기 시작하고 예전처럼 하지 않습니다 .... 당신은 정적을 적용할 수 없습니다 그것은 OOP입니다!

코드를 끝내고 싶습니다. 다음 질문이 저를 괴롭힙니다.

- 객체의 필드를 저장하고 싶습니다. 필드가 즉시 구조체에 배치되고 FileWriteStruct()를 통해 클릭 한 번으로 저장할 수 있기 때문입니다.

- 동일한 클래스 N 조각의 객체, 모두 동일한 기본 클래스에서 상속됨

- 영상을 보고 있기 때문에 파일에 저장해야 하는지 여부에 대해 각 개체를 폴링하지 않도록 하는 방법이 있을 수 있다는 희망이 있었습니다.... 일반적으로 실패입니다. 어리석은 일을 하지 않기로 결정했습니다. 파일에 쓰는 정적 변수에 필수 플래그를 할당하는 하나의 메서드를 만듭니다.

 class CStrategy: public IStrategy
{
protected :
static bool        f_save_required;
void               SetSaveRequired()        { CStrategy::f_save_required = true ;                    }
public :
bool               GetSaveRequired()        { return (CStrategy::f_save_required);                   }

의도한 대로 작동하는 것 같습니다

음, 질문 자체는 다음과 같이 작성하면 어떻게 될까요?

 class CStrategy: public IStrategy
{
private :
static bool        f_save_required;
protected :
void               SetSaveRequired()        { CStrategy::f_save_required = true ;                    }
public :
bool               GetSaveRequired()        { return (CStrategy::f_save_required);                   }

다음과 같이 작성하면 어떻게 될까요?

 class CStrategy: public IStrategy
{
private :
static bool        f_save_required;
protected :
void               SetSaveRequired()         { f_save_required = true                    }
public :
bool               GetSaveRequired()        { return (f_save_required);                    }
 

다른 방법으로 테스트 스크립트를 변경하려고 시도했지만 차이점이 보이지 않습니다. 이 스크립트의 누군가가 위의 게시물에 대한 올바른 수식어를 걷고 있음을 보여줍니다: (protected / private ) M:: x 또는 그냥 x

 //+------------------------------------------------------------------+
interface I
{   bool main();

};
//+------------------------------------------------------------------+
class M: public I
{
protected :
static int         x;
bool               main()   { x++;   Print ( __FUNCTION__ , " = " ,x); return (x> 0 ); }
public :
                     M()      { Print ( __FUNCTION__ );}
                    ~M()      { Print ( __FUNCTION__ );}
};
//+------------------------------------------------------------------+

static int M::x= 0 ;
//+------------------------------------------------------------------+
class A: public M
{
public :
                     A()      { Print ( __FUNCTION__ );}
                    ~A()      { Print ( __FUNCTION__ );} };
//+------------------------------------------------------------------+
class B: public M
{
public :
                     B()      { Print ( __FUNCTION__ );}
                    ~B()      { Print ( __FUNCTION__ );} };
//+------------------------------------------------------------------+
class C: public M
{
public :
                     C()      { Print ( __FUNCTION__ );}
                    ~C()      { Print ( __FUNCTION__ );} };
//+------------------------------------------------------------------+

void OnStart ()
{  I *a = new A;
   I *b = new B;
   I *c = new C;
   I *m = new M;

   a.main();
   b.main();
   c.main();
   m.main();


   delete a;
   delete b;
   delete c;
   delete m;

}
//+------------------------------------------------------------------+
 
Igor Makanu :

다른 방법으로 테스트 스크립트를 변경하려고 시도했지만 차이점이 보이지 않습니다. 이 스크립트의 누군가가 위의 게시물에 대한 올바른 수식어를 걷고 있음을 보여줍니다: (protected / private ) M:: x 또는 그냥 x

x를 호출 하는 클래스 메서드 내에서 다른 모든 위치 M:: x에서 보호된 경우 필드가 정의된 클래스의 메서드에서만 호출이 가능하며 논리는 여기에서 공통입니다.
 
그건 그렇고, 해피 홀리데이. 또 다른 바이트가 발생했습니다.
 
Vladimir Simakov :
x를 호출 하는 클래스 메서드 내에서 다른 모든 위치 M:: x에서 보호된 경우 필드가 정의된 클래스의 메서드에서만 호출이 가능하며 논리는 여기에서 공통입니다.

글쎄요! 깨어나면 다음과 같이 예제가 올바르지 않습니다.

 class M
{
private :
   static int         x;
   bool               main()   { x++;   Print ( __FUNCTION__ , " = " ,x); return (x> 0 ); }
public :
                     M()      { Print ( __FUNCTION__ );}
                    ~M()      { Print ( __FUNCTION__ );} };
//+------------------------------------------------------------------+

static int M::x= 0 ;
//+------------------------------------------------------------------+
class A: public M
{
public :
                     A()      { Print ( __FUNCTION__ );}
                    ~A()      { Print ( __FUNCTION__ );}
   void                 inc()     {main();} };
//+------------------------------------------------------------------+
class B: public M
{
public :
                     B()      { Print ( __FUNCTION__ );}
                    ~B()      { Print ( __FUNCTION__ );}
   void                 inc()     {main();} };
//+------------------------------------------------------------------+
class C: public M
{
public :
                     C()      { Print ( __FUNCTION__ );}
                    ~C()      { Print ( __FUNCTION__ );}
   void                 inc()     {main();} };
//+------------------------------------------------------------------+
void OnStart ()
{  A *a = new A;
   B *b = new B;
   C *c = new C;
   M *m = new M;

   a.inc();



   delete a;
   delete b;
   delete c;
   delete m;

}
//+------------------------------------------------------------------+

즉시 'M::main'을 얻었습니다. 개인 멤버 함수에 액세스할 수 없습니다. tst.mq5 25 32

내가 쓴다면

 protected :   
   bool               main()   { x++;   Print ( __FUNCTION__ , " = " ,x); return (x> 0 ); }

그러면 모든 것이 의도한 대로 작동합니다!

 
Vladimir Simakov :
그건 그렇고, 해피 홀리데이. 또 다른 바이트가 발생했습니다.

고마워, 알았다!

즐거운 휴일 보내세요!

 
Igor Makanu :

비디오 작가   https://youtu.be/lfdAwl3-X_c and https://youtu.be/zME4SOCHT0I 좋은 일만 가득하길 ..... 한 주 내내 불안한 일, 앉아서 하지 않는 일들 생각하기 시작하고 예전처럼 하지 않습니다 .... 당신은 정적을 적용할 수 없습니다 그것은 OOP입니다!

코드를 끝내고 싶습니다. 다음 질문이 저를 괴롭힙니다.

- 객체의 필드를 저장하고 싶습니다. 필드가 즉시 구조체에 배치되고 FileWriteStruct()를 통해 클릭 한 번으로 저장할 수 있기 때문입니다.

- 동일한 클래스 N 조각의 객체, 모두 동일한 기본 클래스에서 상속됨

- 영상을 보고 있기 때문에 파일에 저장해야 하는지 여부에 대해 각 개체를 폴링하지 않도록 하는 방법이 있을 수 있다는 희망이 있었습니다.... 일반적으로 실패입니다. 어리석은 일을 하지 않기로 결정했습니다. 파일에 쓰는 정적 변수에 필수 플래그를 할당하는 하나의 메서드를 만듭니다.

의도한 대로 작동하는 것 같습니다

음, 질문 자체는 다음과 같이 작성하면 어떻게 될까요?

다음과 같이 작성하면 어떻게 될까요?

개체를 파일에 저장해야 하는지 여부를 결정하는 것은 무엇입니까?

이 기능은 모든 개체에 공통적입니까?

 
Koldun Zloy :

개체를 파일에 저장해야 하는지 여부를 결정하는 것은 무엇입니까?

이 기능은 모든 개체에 공통적입니까?

물론 질문은 변증법적입니다. 여기서

- 또는 10가지 전략을 가지고 차량의 상태가 변경될 때 10개의 파일을 작성하십시오(1 차량 = 1 구조)

- 또는 전략이 호출된 클래스에서 1개의 핸들을 틱별로 전송하여 모든 것을 하나의 파일에 쓰는 것이 더 논리적입니다.

나는 두 번째 옵션이 논리적이라고 생각합니다.


모든 차량이 시작될 때 10 개의 구조를 한 번 작성해야한다는 것이 밝혀졌습니다. 상태가 변경되었습니다.

그런 다음 임의의 순서로 필요할 때 기록해야 합니다(SL 또는 TP 트리거). 여기 에서 파일을 열고 한 번에 10개의 구조를 쓰는 것이 더 빠르고 전략이 삐걱거리지 않고 기록이 매초마다가 아닙니다. 각 차량에서 1분에서 1시간


지금까지 정적 변수를 설명하여 get - set, protected set, public get을 통해 이에 대한 액세스를 구현했습니다. 또한 호출 후 정적 변수를 false로 재설정합니다.

 
Igor Makanu :

물론 질문은 변증법적입니다. 여기서

- 또는 10가지 전략을 가지고 차량의 상태가 변할 때 10개의 파일을 작성하십시오(1 차량 = 1 구조)

- 또는 전략이 호출된 클래스에서 1개의 핸들을 틱별로 전송하여 모든 것을 하나의 파일에 쓰는 것이 더 논리적입니다.

나는 두 번째 옵션이 논리적이라고 생각합니다.


모든 차량이 시작될 때 10 개의 구조를 한 번 작성해야한다는 것이 밝혀졌습니다. 상태가 변경되었습니다.

그런 다음 임의의 순서로 필요할 때 기록해야 합니다(SL 또는 TP 트리거). 여기 에서 파일을 열고 한 번에 10개의 구조를 쓰는 것이 더 빠르고 전략이 삐걱거리지 않고 기록이 매초마다가 아닙니다. 각 차량에서 1분에서 1시간


지금까지 정적 변수를 설명하여 get - set, protected set, public get을 통해 이에 대한 액세스를 구현했습니다. 또한 호출 후 정적 변수를 false로 재설정합니다.

이것은 모두 분명합니다. SetSaveRequired() 및 G etSaveRequired()가 비정적이지만 정적 변수에 기록되는 이유는 명확하지 않습니다.