초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1334

 
Artyom Trishkin :
내가 준 코드에서 무언가를 변경한 것은 Aleksey였습니다. 아니면 제가 간과했을 수도 있습니다. 설명을 위한 간단한 예로 "무릎 위에"라고 썼습니다. 기억이 나지 않습니다.

엠비. 알렉세이가 말할 것이다

 
Valeriy Yastremskiy :

루프의 반복은 끝나지 않고 새로운 반복은 시작되지 않지만 다음 If로 이동합니다. 논리가 바뀔 것입니다.

아니요. 거기에서 조건은 처음에 포인터가 성공적으로 생성되면 목록에 추가하도록 설정되었습니다. 곡선 가새는 닫혀 있고 실패하면 단순히 추가가 수행되지 않습니다. 그리고 continue 문 으로 ; 논리는 약간 다르지만 결과는 같습니다.
 

Artyom Trishkin :
Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.

 //+------------------------------------------------------------------+
//| CNewBar Time Возвращает время нулевого бара                      |
//+------------------------------------------------------------------+
datetime CNewBar::Time( void )
  {
   datetime array[ 1 ], ret;
   ret = CopyTime ( this .m_symbol, this .m_timeframe, 0 , 1 , array) == 1 ? array[ 0 ] : 0 ;
   return (array[ 0 ]);
 }
 //+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar( void )
  {
   datetime tm = this .Time();
   if (tm == 0 )
       return false ;
   if (tm != this .m_time)
     {
       this .m_time = tm;
       return true ;
     }
   return false ;
  }


Artem, 여기에서 this 키워드 를 사용하는 이유는 무엇입니까? 결국, 그것 없이도 메소드는 클래스 멤버 와 함께 작동합니다 ...

 
Mikhail Tkachev :

Alex, 자세한 답변 감사합니다.
위의 코드 조각에서 ret 변수의 목적이 명확하지 않습니다...
어쨌든 메서드가 array[0]을 반환하면 왜 계산됩니까?
Z.Y.
클래스 메서드 에서 이것을 사용하는 이유는 무엇입니까? 우리는 이 특정 클래스의 멤버들과 함께 일하고 있습니다...


  1. CopyTime 함수 는 값을 반환하므로 변수로 반환하게 하면 이보다 더 나빠지지는 않을 것입니다... 디버깅의 경우에는 어떻게 되었는지 확인할 수 있을 것입니다.
  2. 이것은 Artyom에 의해 작성되었습니다. 개인적인 취향인 것 같습니다. 일부는 필요합니다. 다음을 작성할 필요는 없습니다.
추신; 방금 변수의 유형이 ret datetime이라는 것을 알았습니다... 물론 int 유형이어야 합니다. 아 역시 수정이 필요할듯...
 
Alexey Viktorov :
  1. CopyTime 함수 는 값을 반환하므로 변수로 반환하게 하면 이보다 더 나빠지지는 않을 것입니다... 디버깅의 경우에는 어떻게 되었는지 확인할 수 있을 것입니다.
  2. 이것은 Artyom에 의해 작성되었습니다. 개인적인 취향인 것 같습니다. 일부는 필요합니다. 다음을 작성할 필요는 없습니다.

1. 여기에 CopyTime 기능이 있는 이유는 무엇입니까?

2. M.B. Artem은 이에 대해 답변할 것입니다. 개인 취향입니까 아니면 필요한가요?

 
Mikhail Tkachev :

1. 여기에 CopyTime 기능이 있는 이유는 무엇입니까?

2. M.B. Artem은 이에 대해 답변할 것입니다. 개인 취향입니까 아니면 필요한가요?

CopyTime()이 마음에 들지 않으면 iTime()으로 교체하십시오. 차이는 없습니다. 가장 중요한 것은 현재 막대의 시간을 가져오는 것입니다.

이 글을 썼을 때의 어렴풋한 기억이 머리에 떠오릅니다. 이 질문도 한 것 같습니다... 그리고 혼동하지 않는다면 다른 클래스에 유사한 메소드가 있는 경우에만 로컬 메소드에 대한 호출이 이루어지도록 보장합니다. 물론 Artyom은 분명히 할 것입니다.

 
Alexey Viktorov :
아니요. 거기에서 조건은 처음에 포인터가 성공적으로 생성되면 목록에 추가하도록 설정되었습니다. 곡선 가새는 닫혀 있고 실패하면 단순히 추가가 수행되지 않습니다. 그리고 continue 문 으로 ; 논리는 약간 다르지만 결과는 같습니다.

예, 결과는 동일하고 내부는 다릅니다. 나를 위해, 비록 색상과 논리를 위해 ....

 
Mikhail Tkachev :


Artem, 여기에서 this 키워드 를 사용하는 이유는 무엇입니까? 결국, 그것 없이도 메소드는 클래스 멤버 와 함께 작동합니다 ...

할 것이다. 나는 그것을 원하기 때문에 그것을 사용합니다 :) 이것은 사용되는 클래스 메소드를 명시적으로 나타냅니다.

두 개의 클래스가 있고 각각 하나의 부모이고 두 번째 클래스는 후속 클래스이고 동일한 이름을 가진 두 개의 메서드를 정의하지만 어떤 이유로 가상이 아닌 경우 사용할 메서드를 명시적으로 지정해야 합니다.

부모 클래스가 CParent이고 상속된 클래스가 C Inherited이고 둘 다 Method() 메서드가 있다고 가정해 보겠습니다.

이 경우 부모 클래스 CParent에서 Method() 메서드를 호출 하면 CParent 클래스의 메서드가 명확하게 호출됩니다. 여기서는 필요하지 않습니다. 메서드를 사용하거나 사용하지 않고 호출할 수 있습니다.

상속된 클래스 C Inherited에서 Method() 메서드를 호출하면 먼저 호출된 클래스 에 속한 메서드가 검색되기 때문에 이 클래스의 메서드도 호출됩니다.

CParent::Method() 로 상속된 상속된 클래스에서 이 메서드를 호출 하면 부모 클래스의 메서드가 호출됩니다. 여기서 컨텍스트 확인 연산자를 사용하여 부모 클래스에 속하는 메서드를 명시적으로 표시했기 때문입니다.

그러나 여전히 나는 메소드를 호출 할 것입니다 상속된 클래스 C의 Method() this로 상 속됨 - this(this == "this") 상속된 클래스의 메서드가 호출되는지 확인합니다.

이것의 사용에 대한 다른 설명이 있습니다. 아마도 OOP에 더 경험이 많은 사람이 말할 것입니다.

 
Valeriy Yastremskiy :

예, 결과는 동일하고 내부는 다릅니다. 나를 위해, 비록 색상과 논리를 위해 ....

차이가 없어야 합니다. 그것은 단지 나를 위해 코드가 더 멋져 보이기 때문입니다. 대괄호와 들여쓰기가 덜 로드됩니다.

 
Alexey Viktorov :
  1. CopyTime 함수 는 값을 반환하므로 변수로 반환하게 하면 이보다 더 나빠지지는 않을 것입니다... 디버깅의 경우에는 어떻게 되었는지 확인할 수 있을 것입니다.
  2. 이것은 Artyom에 의해 작성되었습니다. 개인적인 취향인 것 같습니다. 일부는 필요합니다. 다음을 작성할 필요는 없습니다.
추신; 방금 변수의 유형이 ret datetime이라는 것을 알았습니다... 물론 int 유형이어야 합니다. 아 역시 수정이 필요할듯...

네, 그렇습니다. 저는 이러한 "일부" 중 하나입니다 . 특히 클래스에서 표준 함수를 호출할 때 저는 항상 전역 컨텍스트를 지정합니다. 이 클래스에서 표준 함수와 같은 이름으로 메소드를 작성하는 것을 생각할 수 있기 때문에 – 그래서 그것이 하는 일을 결코 잊지 않습니다. 그리고 그 때 ::는 표준 함수를 호출하는 데 편리하고 이것은 같은 이름의 내 메서드를 호출하는 데 유용합니다.

사유: