앗. 지원 질문 - 페이지 2

 
Urain :

new 연산자 는 클래스의 인스턴스를 만들고 생성자 호출과 연결됩니다. 이것은 구문으로 작성되었으므로 달리 호출할 수 없습니다.

나는이 예에서 왔습니다.

 //+------------------------------------------------------------------+
//| Создание фигуры                                                  |
//+------------------------------------------------------------------+
void CTetrisField::NewShape()
  {
   m_ypos=HORZ_BORDER;
//--- случайным образом создаём одну из 7 возможных фигур
   int nshape= rand ()% 7 ;
   switch (nshape)
     {
       case 0 : m_shape= new CTetrisShape1; break ;
       case 1 : m_shape= new CTetrisShape2; break ;
       case 2 : m_shape= new CTetrisShape3; break ;
       case 3 : m_shape= new CTetrisShape4; break ;
       case 4 : m_shape= new CTetrisShape5; break ;
       case 5 : m_shape= new CTetrisShape6; break ;
       case 6 : m_shape= new CTetrisShape7; break ;
     }
여기에 대략적으로 말하면 대괄호(생성자 호출)가 없습니다. 아직 이해가 안되는 부분이 있을 수 있습니다.
 
Urain :

이 코드는 다중 상속과 거의 다르지 않습니다.

실제로 클래스 C_C는 해당 포인터를 통해 데이터 C_A 및 C_B에 액세스할 수 있습니다.


집계라고 합니다.
 
Yedelkin :

이 예제에서 시작했습니다.

여기에 대략적으로 말하면 대괄호(생성자 호출)가 없습니다. 아직 이해가 안되는 부분이 있을 수 있습니다.

내가 왜 바로, 나를위한 것이 아니라 중앙 세탁소를위한 것입니다. 나는 괄호를 안 쳤습니다 :o)
 
Urain :
내가 왜 바로, 나를위한 것이 아니라 중앙 세탁소를위한 것입니다. 나는 괄호를 안 쳤습니다 :o)

내 컴파일러는 대괄호가 없다고 맹세하지 않습니다 ...

       case    50 : d_Control= new CControl_50; break ;

일반적으로 질문이 갑자기 생겼습니다. 올바른 방법은 무엇입니까? 아니면 괄호가 있든 없든 상관없나요?

 
Yedelkin :

내 컴파일러는 대괄호가 없다고 맹세하지 않습니다 ...

일반적으로 질문이 갑자기 생겼습니다. 올바른 방법은 무엇입니까? 아니면 괄호가 있든 없든 상관없나요?

이런 식으로 작동한다면 구문 통합 문제에 가깝습니다. 가장 중요한 것은 속도가 영향을 받지 않는다는 것입니다.

ZY 일반적으로 작동합니까? 솔직히 말해서 체크 안하고 항상 대괄호로 씁니다.

 
Urain :

이런 식으로 작동한다면 구문 통합 문제에 가깝습니다. 가장 중요한 것은 속도가 영향을 받지 않는다는 것입니다.

ZY 일반적으로 작동합니까? 솔직히 말해서 체크 안하고 항상 대괄호로 씁니다.

지금까지는 컴파일 결과에 대해서만 이야기할 수 있습니다. 코드의 실제 동작을 확인하려면 아직 갈 길이 멉니다.
 

MQL5에서 클래스 객체 를 동적으로 생성하는 방법에 대한 설명을 읽지 않았지만 C++에서는 대괄호 없이(표준 생성자가 호출됨) 대괄호를 사용하여 가능합니다(생성자는 대괄호 안의 매개변수에 따라 호출됨). 예시:


class CExample
{
    int param;
public:
    CExample();
    CExample(int x);
    ~CExample();
}

CExample::CExample(int x)
{
    param = x;
}

//..........вызов..............
//..где-то в тексте программы..

   CExample *ex1 = new CExample;         //создание с конструктором CExample();
   CExample *ex1 = new CExample();       //создание с конструктором CExample();
   CExample *ex1 = new CExample(value);  //создание с конструктором CExample(int x);

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
mql5에서는 매개변수를 생성자에 전달할 수 없습니다.
 
Vigor :
mql5에서는 매개변수를 생성자에 전달할 수 없습니다.

"mql5에서는 아직 매개변수를 생성자에 전달할 수 없습니다."
 
PiramidaR :

MQL5에서 클래스 객체 를 동적으로 생성하는 방법에 대한 설명을 읽지 않았지만 C++에서는 대괄호 없이(표준 생성자가 호출됨) 대괄호를 사용하여 가능합니다(생성자는 대괄호 안의 매개변수에 따라 호출됨). 예시:

이해했습니다. 간단하고 명쾌한 설명 감사합니다. 대괄호는 가능한 매개 변수에 대한 것으로 나타났습니다.

그리고 MQL5에서 동적 클래스 객체를 생성하는 방법에 대한 설명은 매우 간결합니다.

MQL5 참조 / 언어 기초 / 연산자 / 새 객체 생성 연산자

MQL5 참조 / 언어 기본 / 데이터 유형 /객체 포인터