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)
{
case0: m_shape=new CTetrisShape1; break;
case1: m_shape=new CTetrisShape2; break;
case2: m_shape=new CTetrisShape3; break;
case3: m_shape=new CTetrisShape4; break;
case4: m_shape=new CTetrisShape5; break;
case5: m_shape=new CTetrisShape6; break;
case6: 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.
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);
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:
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:
A grandes rasgos, aquí no hay paréntesis (llamada al constructor). Es posible que no esté entendiendo algo todavía.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.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 usé paréntesis :o)
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 da igual que haya paréntesis o no?
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.
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.
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);
En mql5 todavía no se pueden pasar parámetros al constructor.
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