Errores, fallos, preguntas - página 2563

 
Andrey Barinov:

?

Tiene un modificador estático en el ejemplo, si lo quitas, el compilador dará una advertencia como debería

se puede acceder a static desde cualquier parte de su código con el operador de resolución de contexto... de cualquier fragmento de código. (No recuerdo el ámbito, no lo he comprobado recientemente, pero lo más probable es que sea global, como si se describiera en la parte superior del código, es decir, no importa dónde se haya declarado el método/campo estático)

 
Igor Makanu:

Se puede acceder a un statik desde cualquier parte del código utilizando la declaración de resolución de contexto... ¡ de cualquier parte del código! (No recuerdo el ámbito, no lo he comprobado recientemente, pero lo más probable es que sea global, como si se describiera en la parte superior del código, es decir, no importa dónde se declare el método/campo estático)

¿Desde cuándo es así :)?

Todas las mismas reglas se aplican a las estáticas (privadas, protegidas, públicas), sólo que no requieren la creación de objetos.

Se trata de un error evidente.

 
Andrey Barinov:

¿Cuánto tiempo lleva así :)?

No lo sé, lo que sí puedo decir es que hace un par de meses@Ilyas admin estaba explicando el procedimiento de inicialización de la estática, y mencionó que los métodos de la estática y los campos de la estática se inicializan junto con las variables globales al inicio del programa MQL... ve más allá y busca en sus posts

Andrey Barinov:

Todas las mismas reglas se aplican a las estáticas (privadas, protegidas, públicas), sólo que no requieren la creación de objetos.

Se trata de un error evidente.

No estoy dispuesto a discutir ni quiero hacerlo, pero el texto de ayuda indica el comportamiento de los métodos estáticos

el código MQL está dando grandes pasos hacia el comportamiento de los programas C#, la situación es similar allí, así como si el programador decide utilizar el operador de resolución de contexto, significa que conscientemente rechaza la ayuda del compilador para identificar las violaciones de la integridad de los datos en la clase, hay formas clásicas de obtener métodos y campos sin operador de resolución de contexto


UPD: He decidido reescribir mi librería MQL poco a poco, me horroriza notar que escribo como he visto en códigos MQL populares nombres de métodos y campos que coinciden con nombres de palabras reservadas....imho esto es también un paso para evitar la ayuda del compilador al "romper" dependencias.... más o menos ))))

 

Igor Makanu:

ya que si el programador decide utilizar el operador de resolución de contexto, significa que rechaza conscientemente la ayuda del compilador para detectar la violación de la integridad de los datos en la clase, hay formas clásicas de obtener métodos y campos sin el operador de resolución de contexto

Creo que has fumado demasiado OOP. Dale un descanso y vuelve con la cabeza despejada. La declaración de resolución de contexto define la visibilidad pero no tiene efecto sobre el acceso.

 
TheXpert:

Creo que has tenido demasiado OOP, tómate un descanso y luego con la cabeza fresca. la declaración de resolución de contexto define la visibilidad, pero no tiene ningún efecto sobre el acceso.

Bueno, me toca decidir qué fumar y cuándo descansar ))))

SZY: siempre hay un montón de trucos en cualquier lenguaje con el acceso a los contenidos de la memoria. He leído las aficiones allí en los comentarios, hay peleas regulares sobre python y c ++, una vez más - hay formas más humanas de trabajar con los campos y métodos, si usted decidió que es más rápido, entonces usted no debe culpar a lo que se obtiene - en todos los compiladores siempre se puede romper en donde no debe))

 
Igor Makanu:

No lo sé, puedo decir con seguridad que hace un par de meses@Ilyas admin estaba explicando el procedimiento de inicialización de la estática y mencionó que los métodos estáticos y los campos estáticos se inicializan junto con las variables globales al inicio del programa MQL... ve más allá y busca en sus posts

No estoy dispuesto a discutir y no quiero hacerlo, pero el texto de ayuda representa el comportamiento de los métodos estáticos

"private" - permite el acceso a las variables y métodos de una clase sólo desde los métodos de esa clase. "

¿Dónde no está clara la palabra "sólo"?

OnStart no es un método de la clase A, según el ejemplo.

 
Aliaksandr Hryshyn:

"private" - permite el acceso a las variables y métodos de una clase sólo desde los métodos de esa clase. "

¿Dónde no está clara la palabra "sólo"?

OnStart no es un método de la clase A, según el ejemplo.

No estamos hablando del modificador private, sino del modificador static - haga pruebas y vea cómo se comporta static en MQL

 
Igor Makanu:

No lo sé, puedo decir con seguridad que hace un par de meses@Ilyas admin estaba explicando el procedimiento de inicialización de la estática y mencionó que los métodos estáticos y los campos estáticos se inicializan junto con las variables globales al inicio del programa MQL... ve más allá y busca en sus posts

No estoy dispuesto a discutir, pero el texto de ayuda indica el comportamiento de los métodos estáticos

Y imho, no creo que sea necesario confirmar con argumentos - MQL se está moviendo mucho hacia el comportamiento de los programas de C#, tiene una situación similar, así como si el programador decide usar el operador de resolución de contexto, significa que conscientemente declina la ayuda del compilador para identificar violaciones de la integridad de los datos en la clase, hay formas clásicas de obtener métodos y campos sin operador de resolución de contexto


UPD: He decidido reescribir mi librería MQL poco a poco, me horroriza notar que escribo como he visto en códigos MQL populares nombres de métodos y campos que coinciden con nombres de palabras reservadas....imho esto es también un paso para evitar la ayuda del compilador al "romper" dependencias.... más o menos ))))

https://pikabu.ru/story/nevozmozhno_tak_nevozmozhno_2129852
 

?

es una situación extraña, todo fuera de la clase ha estado trabajando durante mucho tiempo con el staichi. y sólo estoy haciendo un gran alboroto sobre él.... Sólo por diversión, reproduzca el código usted mismo:

int print(int value)
{  Print(value,":",__FUNCTION__); 
 return(value);
}
class A
{
private:
   static int        a1;
protected:
   static int        a2;
public:
   static int        a3;

};
//+------------------------------------------------------------------+
static int A::a1 = print(1);
static int A::a2 = print(2);
static int A::a3 = print(3);

//+------------------------------------------------------------------+
void OnStart()
{}
//+------------------------------------------------------------------+

¿Ves una instancia del objeto? y existe en MQL ;)

SZZ: Y existe a nivel de ayuda... ¿cuál es tu problema conmigo?

https://www.mql5.com/ru/docs/basis/oop/staticmembers

El hecho de no poder declarar los miembros de la clase de forma estática haría necesario declarar estos datos a nivel global del programa. Esto rompería la relación entre los datos y su clase, y también es inconsistente con el paradigma básico de la POO de combinar datos y métodos en una clase para manejarlos. Un miembro estático permite que los datos de la clase que no son específicos de una instancia individual existan en el ámbito de la clase.