학생을 위한 OOP. - 페이지 16

 

중재자는 모든 토론을 별도의 스레드로 이동하십시오. OOP의 장점에 대한 토론과 함께 이러한 분기와 무슨 관련이 있습니까?

 
Alexey Viktorov :

한 가지 더 질문: 변수 선언, 포인터 가져오기/생성, 개체 인스턴스 생성의 차이점은 무엇입니까? 더 정확하게는 차이점 자체가 아니라 어떤 경우에 적용하는 것이 좋습니다. 예를 들어 위치를 열려면 변수를 선언하는 것으로 충분합니다.

그리고 어떤 경우에는 포인터를 사용하는 것이 더 정확합니다. 이 경우 개체 인스턴스 없이는 할 수 없습니다.

두 방법의 장단점은 무엇입니까?

1. 객체가 전역 범위 에 있으면 정적 객체입니다. 정적 메모리에 상주하며 프로그램이 존재하는 한 존재합니다.

생성자는 프로그램의 첫 번째 함수가 호출되기 전에 호출됩니다. 소멸자는 OnDeinit() 다음에 호출됩니다.

2. 함수 내에서 선언된 객체는 로컬 객체입니다. 그들은 스택에 배치됩니다. 함수가 종료되면 소멸됩니다.
중괄호 안에 로컬 객체를 선언할 수 있습니다.


예를 들면 다음과 같습니다.

 if ( ... )
{
  MyClass object ;
  ...
}   //  Здесь вызывается деструктор.

또는 다음과 같이:

{
  MyClass object ;
  ...
}   //  Здесь вызывается деструктор.

블록을 나갈 때 파괴됩니다. 소멸시 소멸자가 호출됩니다.

스택의 크기는 일반적으로 제한되어 있으므로 매우 큰 개체는 스택에 놓을 수 없습니다.

3. new 연산자를 사용하여 생성된 객체는 동적 메모리(힙)에 있습니다.
삭제 연산자로 명시적으로 소멸될 때까지 존재합니다.


예시:

 void func()
{
  Myclass* pObject = new MyClass();
}

이 예에서는 두 개의 변수를 만듭니다. 동적 메모리에 있는 클래스 MyClass의 개체입니다.

그리고 pObject 변수는 Myclass에 대한 포인터입니다. 동적 메모리에 있는 개체의 주소가 할당됩니다.

함수가 종료되면 pObject 변수는 소멸되지만 개체는 동적 메모리에 남아 있습니다.

삭제하려면 주소를 어딘가에 저장해야 합니다.

생성 및 소멸 시 생성자와 소멸자도 호출됩니다.

동적 변수에 액세스하는 것은 일반적으로 로컬 변수에 액세스하는 것보다 시간이 더 걸립니다.


어떤 객체를 생성할 때 이 모든 것을 고려해야 합니다.


 
Koldun Zloy :

1. 객체가 전역 범위 에 있으면 정적 객체입니다. 정적 메모리에 상주하며 프로그램이 존재하는 한 존재합니다.

...

그리고 ZyKspert조차도 아무 말도 하지 않을 것입니다.
 
Koldun Zloy :

이 옵션을 사용하면

 #include <Trade\Trade.mqh>
CTrade trade;

int OnInit ()
{
 trade.SetExpertMagicNumber( 123 );
}

void OnTick ()
{
 CTrade trade;
 trade.Buy( 0.1 );
}

컴파일러 경고 를 무시하고 123이 아닌 마법으로 위치를 열 수 있습니까?

즉, OnTick 함수에서 새 개체가 생성되고 그 안의 마법은 123과 같지 않습니다.

 
Alexey Viktorov :

이 옵션을 사용하면

컴파일러 경고 를 무시하고 123이 아닌 마법으로 위치를 열 수 있습니까?

즉, OnTick 함수에서 새 개체가 생성되고 그 안의 마법은 123과 같지 않습니다.

전문가 MagicNumber 설정

 
Alexey Viktorov :

이 옵션을 사용하면

컴파일러 경고 를 무시하고 123이 아닌 마법으로 위치를 열 수 있습니까?

즉, OnTick 함수에서 새 개체가 생성되고 그 안의 마법은 123과 같지 않습니다.

네, 그러죠. 이들은 서로 다른 두 개체입니다. OnTick의 지역 거래 객체는 전역 객체와 이름이 같기 때문에 OnTick 함수에서만 접근할 수 있습니다. 전역 개체가 범위를 벗어났습니다. 따라서 현지 거래 MagicNumber는 아직 설정되지 않았습니다.

 
Alexey Viktorov :

이 옵션을 사용하면

 #include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы

int OnInit ()
{
 trade.SetExpertMagicNumber( 123 );
}

void OnTick ()
{
 CTrade trade;  // Объект № 2 в локальной области OnTick()
 trade.Buy( 0.1 );
}

컴파일러 경고 를 무시하고 123이 아닌 마법으로 위치를 열 수 있습니까?

즉, OnTick 함수에서 새 개체가 생성되고 그 안의 마법은 123과 같지 않습니다.

모든 것은 변수와 완전히 동일합니다.

그리고 초점:

 #include <Trade\Trade.mqh>
CTrade trade;   // Объект trade в глобальной области программы

int OnInit ()
{
 trade.SetExpertMagicNumber( 123 );
}

void OnTick ()
{
 CTrade *trade_ptr=GetPointer(trade);  // Указатель на объект trade
 trade_ptr.Buy( 0.1 );
}
 
그렇다면 이 Set Expert MagicNumber가 필요한 이유는 무엇입니까?
 
Сергей Таболин :
그렇다면 이 Set Expert MagicNumber가 필요한 이유는 무엇입니까?

마법을 무역 클래스 개체에 설정합니다. 코드베이스에서 지금 수행하는 것이 일반적이므로 전체 프로그램에 대해 CTrade 클래스의 개체가 두 개 이상 있을 수 있습니다. 같은 개체입니다. 그리고 이 개체는 거래 작업 을 수행하는 데 사용됩니다. 그리고 전체 프로그램에 대해 하나의 객체를 만들 필요가 전혀 없으며 초기화 중에 설정한 매직, 슬립 및 기타 매개변수를 변경해야 할 때마다 다시 재설정합니다. 거래되는 각각의 심볼에 대해 자신만의 트레이딩 객체를 생성하고, CTrade 클래스의 이 특정 객체가 속한 심볼의 속성에 따라 필요한 매개변수를 설정하고, 원하는 객체에 대한 포인터를 가져와 침착하게 거래할 수 있습니다. 설정된 옵션을 무시하지 않고 원하는 기호에서 원하는 거래 클래스의
또는 적절한 설정으로 별도의 거래 개체를 설정하여 다른 마술사와 작업할 수 있습니다. 결국 하나의 Expert Advisor에 여러 명의 마술사가있을 수 있습니다.

그것은 모두 우리가 무엇을 어떻게 사용하는지 이해하는 데 달려 있습니다.

 
Artyom Trishkin :

무역 클래스 개체에 마법을 설정합니다. 현재 코드 기반에서 하는 것이 일반적이므로 전체 프로그램에 대해 CTrade 클래스의 개체가 두 개 이상 있을 수 있습니다. 같은 개체입니다. 그리고 이 개체는 거래 작업 을 수행하는 역할을 합니다. 그리고 전체 프로그램에 대해 하나의 객체를 만들 필요가 전혀 없으며 초기화 중에 설정한 매직, 슬립 및 기타 매개변수를 변경해야 할 때마다 다시 재설정합니다. 거래되는 각각의 심볼에 대해 자신만의 트레이딩 객체를 생성하고, CTrade 클래스의 이 특정 객체가 속한 심볼의 속성에 따라 필요한 매개변수를 설정하고, 원하는 객체에 대한 포인터를 가져와 침착하게 거래할 수 있습니다. 설정된 옵션을 무시하지 않고 원하는 기호에서 원하는 거래 클래스의
또는 적절한 설정으로 별도의 거래 개체를 설정하여 다른 마술사와 작업할 수 있습니다. 결국 하나의 Expert Advisor에 여러 명의 마술사가있을 수 있습니다.

그것은 모두 우리가 무엇을 어떻게 사용하는지 이해하는 데 달려 있습니다.

그 경우, 이

SetExpertMagicNumber
Устанавливает идентификатор эксперта

잘못된 설명?

전문가를 위한 것이라면 모든 주문/직위에는 이 마법이 있어야 한다는 것을 이해했습니다. ((