Preguntas sobre POO en MQL5 - página 18

 

¿Puede decirme en qué se diferencia?
Crear un objeto, o puntero, de esta manera

class CClass
{
   public:


}CObj, *pCObj;

de la criatura clásica

CClass  CObj;
CClass *CObj;

Notado un comportamiento diferente en los profesionales, comenzó a preguntarse por qué, y la búsqueda de la literatura, ni siquiera saben cómo llamar a la primera forma de mirar.

 
Roman:

¿Puede decirme en qué se diferencia?
Crear un objeto, o puntero, de esta manera

de la criatura clásica

He notado un comportamiento diferente en los pluses, me he preguntado por qué, y la búsqueda bibliográfica, no sé ni cómo llamar a la primera forma de encontrarla.

No hay diferencia, ni en MQL ni en pluses.

 
Koldun Zloy:

No es diferente, ya sea en los MQL o en los profesionales.

No entiendes la pregunta. La diferencia no está en los idiomas, sino en las propias declaraciones.
No entiendo el comportamiento del objeto del primer ejemplo.
Mi opinión es que el objeto se crea de la misma manera en la pila y se destruye después de llamaral destructor de la clase, y el objeto es visible globalmente en el código.
Eso es lo que quería aclarar, ¿cuál es el comportamiento del primer método?
¿Estoy adivinando correctamente?
¿Cómo se llama para encontrarlo en google?

Porque he notado (no en mql, sino en C++) que si creas un objeto de forma diferente, entonces el comportamiento en los métodos utilizados cambia, no como se esperaba.

 
Roman:

No entiendes la pregunta. La diferencia no está en los idiomas, sino en las propias declaraciones.
No entiendo el comportamiento del objeto del primer ejemplo.
Mi opinión es que el objeto también se crea en la pila y se destruye después de llamar al destructor de la clase y el objeto es visible globalmente en el código.
Eso es lo que quería aclarar, ¿cuál es el comportamiento del primer método?
¿Estoy adivinando correctamente?
¿Cómo se llama para que pueda buscarlo en Google?

Porque me he dado cuenta de que si se crea un objeto de forma diferente, el comportamiento en los métodos utilizados cambia, no como se esperaba.

Entiendo la pregunta. No hay ninguna diferencia en los anuncios.

 
Koldun Zloy:

Entiendo la pregunta. No hay ninguna diferencia en los anuncios.

La diferencia está probablemente en el alcance.
El primer ejemplo de un archivo siempre es visible de forma global, el segundo ejemplo o el nuevo, puede ocultarse en una función.

 
Roman:

La diferencia está probablemente en el alcance.
El primer ejemplo de un archivo es siempre visible de forma global, el segundo ejemplo o el nuevo, puede ocultarse en una función.

La diferencia aquí no es cómo se declara, sino dónde.

 
Koldun Zloy:

No se trata de cómo se declara, sino de dónde.

Yo también he llegado a esa conclusión mediante un razonamiento lógico :))
Quería estar seguro de que mis pensamientos eran correctos. Gracias por la aclaración.

 
Vladimir Simakov:
   lotDigits=MathMax(-(int)MathFloor(MathLog10(lotStep)),0);

He comprobado que este código no funciona correctamente para calcular el punto decimal

Básicamente, el mío tampoco funciona siempre correctamente, lo sé.

una secuencia de comandos para comprobarlo:

void OnStart()
  {
   double l=0.0;
   for(int i=0; i<100; i++)
     {
      Print(l," ---> LotDigits / MyDigits = ",LotDigits(l)," / ",MyDigits(l));
      l+=0.003;
     }
  }
//+------------------------------------------------------------------+
int LotDigits(double value)
  {
   return(MathMax(-(int)MathFloor(MathLog10(value)),0));
  }
//+------------------------------------------------------------------+
int MyDigits(double v)
  {
   long i=10000000,k=long(v/0.0000001);
   int d=0;
   while(d<7 && k%i>0)
     {
      i/=10;
      d++;
     }
   return(d);
  }
//+------------------------------------------------------------------+

Tengo el registro del script adjunto.

Archivos adjuntos:
20190829.log  9 kb
 
Roman:

¿Puede decirme en qué se diferencia?
Crear un objeto, o puntero, de esta manera

de la criatura clásica

En los profesionales noté un comportamiento diferente, me pregunté por qué, y la búsqueda bibliográfica, ni siquiera sé cómo llamar a la primera forma de mirar.

Personalmente, tampoco veo mucha diferencia, pero el propio estilo de esa escritura me parece bastante peligroso.

El puntero debe ser inmediatamente, en el momento de la creación, igual a NULL o al puntero a un objeto real. Se crea un pequeño espacio de memoria donde se almacenará este puntero, ya sea con un valor nulo o como un puntero normal.

La declaración de un objeto, en cambio, crea el objeto completo, llamando al constructor y asignando memoria.

 
Igor Makanu:

He comprobado que este código no funciona correctamente en el cálculo del punto decimal

Básicamente, el mío tampoco funciona siempre correctamente, lo sé.

una secuencia de comandos para comprobarlo:

Tengo el registro del script adjunto.

Tengo la suposición de que no habrá mucho, como 0,15. Al menos yo no he oído hablar de ello. Si de repente veo uno, lo volveré a hacer.