Preguntas sobre POO en MQL5 - página 81

 

Otra pregunta sobre el reparto

hay este código:

struct SHash
   {
      ulong hash[2];
      SHash()                                {  }
      SHash(const double)                    { ArrayInitialize(hash, 0xAAAAAAAAAAAAAAAA);                }
      SHash(const SHash &val)                { ArrayCopy(hash, val.hash);                                }
      bool operator==(const SHash &val)const { return(hash[0] == val.hash[0] && hash[1] == val.hash[1]); }
   };
//+------------------------------------------------------------------+
class BASE
{
private:
   const SHash _hash;
protected:
   BASE(SHash &hash): _hash(hash)             {  }
};

class A:BASE
{
public:
   A(SHash &hash):BASE(hash)                 {  }
};


class B:BASE
{
public:
   B():BASE((SHash)0.0)                      {  }
};

//+------------------------------------------------------------------+
void OnStart()
{
   SHash h(0.0);
   A a(h);
}
//+------------------------------------------------------------------+

y quiero inicializar la clase B con un constructor sin parámetros, pero no puedo lanzar la estructura SHash al constructor SHash(const double)

es decir, necesito algún doble de fundición (SHash)

En mi ejemplo, hay un error del compilador: '(SHash)' - operación de fundición no válida


si lo escribes así:

class B:BASE
{
public:
   B():BASE(0.0)                      {  }
};
error: '0.0' - parámetro pasado como referencia, variable esperada

 
Igor Makanu:

Otra pregunta sobre el reparto

hay este código:

y quiero inicializar la clase B con un constructor sin parámetros, pero no puedo lanzar la estructura SHash al constructor SHash(const double)

es decir, necesito algún doble de fundición (SHash)

En mi ejemplo, hay un error del compilador: '(SHash)' - operación de fundición no válida


si lo escribes así:

error: '0.0' - parámetro pasado como referencia, variable esperada

class B:BASE
{
public:
   B():BASE(SHash())                      {  }
};
 
Vladimir Simakov:

funciona así

pero se necesita la inicialización 0xAAAAAAAAAAAAAAAA para la estructura SHash - es una especie de NULL - no se obtiene el hash MD5 de la cadena de prueba (lo he comprobado)

El constructor SHash() parece no ser necesario ahora, pero parece haber sido necesario hace unos días ))) Así que, al principio no estaba, luego arreglé un error de compilación en algún lugar con este constructor vacío, o al comparar estructuras o durante la inicialización... en general, hay una alta probabilidad de que se necesite .... aunque parece ser una buena regla inicializar todas las variables....

en general, me gustaría tener una variante o inequívoca - no ))))

 
Igor Makanu:

funciona así

pero se necesita la inicialización 0xAAAAAAAAAAAAAAAA para la estructura SHash - es una especie de NULL - no se obtiene el hash MD5 de la cadena de prueba (lo he comprobado)

El constructor SHash() parece no ser necesario ahora, pero parece haber sido necesario hace unos días ))) Así que, al principio no estaba, luego arreglé un error de compilación en algún lugar con este constructor vacío, o al comparar estructuras o durante la inicialización... en general, hay una alta probabilidad de que se necesite .... aunque parece ser una buena regla inicializar todas las variables....

en general, me gustaría tener una variante o inequívoca - no )))

SHash(0.0)

pero adivínalo tú mismo)))

 
Vladimir Simakov:

pero adivínalo tú mismo))

SHash((double)x)
 
Vladimir Simakov:

y adivinarlo tú mismo)))

class B:BASE
{
public:
   B():BASE(SHash(0.0))                      {  }
};

Oh, hombre, ¡funciona!

Creo que también lo intenté así, no sé por qué no funcionó.

Gracias.

¡¡mal hecho ((!!

 
Alexandr Andreev:

Sí, ¿y de dónde sacas la x en el constructor de la clase?)

 
Vladimir Simakov:

Sí, ¿y de dónde sacas x en el constructor de la clase?)

el punto no es sobre x) sino que puede haber un flotador en el extremo receptor, sólo 0.0 no es confiable tampoco

 
Alexandr Andreev:

el punto no es la x) sino que puede haber un flotador en el receptor además del duble, y especificar sólo 0,0 tampoco es fiable

aunque todo esto es un detalle... no es especialmente importante

 
Alexandr Andreev:

el punto no es sobre x) sino que puede haber flotación en la recepción por el duble, por lo que especificar sólo 0,0 tampoco es fiable.

No importa qué inicializar allí, incluso int - cualquier número para llamar a este constructor

y elegí el 0,0 para evitar errores de imprenta - cualquier dígito, es decir, el 0,0. es más difícil de escribir y de imprimir mal que el 123