OLP. Problemas de aplicación - página 2

 
Urain:

El operador new crea una instancia de la clase y se llama a un constructor junto con ella. Está escrito en la sintaxis, por lo que no hay otra forma de llamarlo.

He procedido a partir de este ejemplo:

//+------------------------------------------------------------------+
//| Создание фигуры                                                  |
//+------------------------------------------------------------------+
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;
     }
A grandes rasgos, aquí no hay paréntesis (llamada al constructor). Es posible que no esté entendiendo algo todavía.
 
Urain:

Este código casi no difiere de la herencia múltiple.

De hecho, la clase C_C tiene acceso a los datos de C_A y C_B a través de los punteros correspondientes.


Esto se llama agregación
 
Yedelkin:

Me basé en este ejemplo:

Aquí, a grandes rasgos, no hay paréntesis (llamada al constructor). Es posible que aún no entienda algo.

Por qué yo, no es para mí, es para la lavandería central, no cogí paréntesis :o)
 
Urain:
Por qué yo, no es para mí, es para la lavandería central, no usé paréntesis :o)

Mi compilador no se queja de la falta de paréntesis...

      case  50: d_Control=new CControl_50; break;

De todos modos, de repente surgió una pregunta: ¿cuál es el camino correcto? ¿O da igual que haya paréntesis o no?

 
Yedelkin:

Mi compilador no se queja de la falta de paréntesis...

De todos modos, de repente surgió una pregunta: ¿cuál es el camino correcto? ¿O es que da igual que haya paréntesis o no?

Si funciona en ambos sentidos, es más bien una cuestión de unificación sintáctica. Lo principal es que no afecta a la velocidad.

ZS ¿Y funciona del todo? Para ser sincero no lo he comprobado, siempre escribo con paréntesis.

 
Urain:

Si funciona en ambos sentidos, es más bien una cuestión de unificación sintáctica. Lo principal es no afectar a la velocidad.

ZS ¿Funciona del todo? Para ser sincero no lo he comprobado, siempre escribo con paréntesis.

Hasta ahora sólo puedo hablar de los resultados de la compilación. Todavía falta mucho para comprobar si el código funciona realmente.
 

No he leído la descripción de la creación de objetos de clase dinámicamente en MQL5, pero en C++ se puede hacer sin paréntesis (se llama al constructor estándar) y con paréntesis (se llama al constructor en función de los parámetros entre paréntesis). Ejemplo:


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
 
En mql5, no se pueden pasar parámetros al constructor.
 
Vigor:
En mql5 todavía no se pueden pasar parámetros al constructor.

aclarar " En mql5 todavía no se pueden pasar parámetros al constructor".
 
PiramidaR:

No he leído la descripción de la creación de objetos de clase dinámicamente en MQL5, pero en C++ se puede hacer sin paréntesis (se llama al constructor estándar) y con paréntesis (se llama al constructor en función de los parámetros entre paréntesis). Ejemplo:

Entendido, gracias por la explicación sencilla y directa. Resulta que los paréntesis son para posibles parámetros.

Y la descripción de cómo crear objetos de clase dinámicos en MQL5 es muy concisa:

MQL5 Reference / Fundamentos del lenguaje / Operadores / Operador de creación de objetos new

Referencia MQL5 / Conceptos básicos del lenguaje / Tipos de datos / Punteros a objetos