Erreurs, bugs, questions - page 2563

 
Andrey Barinov:

?

Il y a un modificateur statique dans l'exemple, si vous le supprimez, le compilateur émettra un avertissement comme il se doit.

statiques sont accessibles depuis n'importe quelle partie de votre code avec l'opérateur de résolution de contexte... à partir de n'importe quel fragment de code ! (Je ne me souviens pas du champ d'application, je ne l'ai pas vérifié récemment, mais il est fort probable qu'il soit global, comme s'il était décrit tout en haut du code, c'est-à-dire que l'endroit où la méthode/le champ statique a été déclaré n'a pas d'importance).

 
Igor Makanu:

On peut accéder à une statik depuis n'importe quelle partie du code en utilisant l'instruction de résolution de contexte... de n'importe quelle partie du code ! (Je ne me souviens pas du champ d'application, je ne l'ai pas vérifié récemment, mais il est fort probable qu'il soit global, comme s'il était décrit tout en haut du code, c'est-à-dire que l'endroit où la méthode/le champ statique est déclaré n'a pas d'importance).

Depuis combien de temps cela est-il devenu :) ?

Toutes les mêmes règles s'appliquent aux statiques (private, protected, public), elles ne nécessitent simplement pas la création d'un objet.

C'est un bug évident.

 
Andrey Barinov:

Depuis combien de temps est-ce que c'est comme ça :) ?

Je ne sais pas, mais je peux dire avec certitude qu'il y a quelques mois@Ilyas admin expliquait la procédure d'initialisation des statiques, et il a mentionné que les méthodes et les champs des statiques sont initialisés avec les variables globales au démarrage du programme MQL... allez plus loin et recherchez dans ses posts

Andrey Barinov:

Toutes les mêmes règles s'appliquent aux statiques (private, protected, public), elles ne nécessitent simplement pas la création d'un objet.

C'est un bug évident.

Je ne suis pas prêt à argumenter et ne le souhaite pas, mais le texte d'aide indique le comportement des méthodes statiques

le code MQL fait de grands pas vers le comportement des programmes C#, la situation y est similaire, de même que si le programmeur décide d'utiliser l'opérateur de résolution de contexte, cela signifie qu'il refuse consciemment l'aide du compilateur pour identifier les violations de l'intégrité des données dans la classe, il existe des moyens classiques d'obtenir des méthodes et des champs sans opérateur de résolution de contexte


UPD : J'ai décidé de réécrire ma bibliothèque MQL petit à petit, je suis horrifié de constater que j'écris comme je l'ai vu dans les codes MQL populaires les noms des méthodes et des champs qui coïncident avec les noms des mots réservés.... peut-être que c'est aussi une étape pour éviter l'aide du compilateur lors de la "rupture" des dépendances.... pas vraiment ))))

 

Igor Makanu:

comme si le programmeur décide d'utiliser l'opérateur de résolution de contexte, cela signifie qu'il refuse consciemment l'aide du compilateur pour détecter la violation de l'intégrité des données dans la classe, il existe des moyens classiques d'obtenir des méthodes et des champs sans opérateur de résolution de contexte

Je pense que vous avez trop fumé de POO. Donnez-lui un peu de repos, puis faites-le à tête reposée. La déclaration de résolution de contexte définit la visibilité mais n'a aucun effet sur l'accès.

 
TheXpert:

Je pense que vous avez eu trop d'OOP, prenez du repos et ensuite avec une tête fraîche. la déclaration de résolution de contexte définit la visibilité mais n'a aucun effet sur l'accès.

C'est à moi de décider quoi fumer et quand me reposer ))))

SZY : il y a toujours beaucoup d'astuces dans n'importe quel langage ayant accès au contenu de la mémoire. Je lis les hobbies dans les commentaires, il y a régulièrement des bagarres à propos de python et de c++, une fois de plus - il y a des façons plus humaines de travailler avec les champs et les méthodes, si vous avez décidé que c'est plus rapide, alors vous ne devriez pas blâmer ce que vous obtenez - dans tous les compilateurs, vous pourriez toujours vous introduire là où vous ne devriez pas)))

 
Igor Makanu:

Je ne sais pas, mais je peux dire avec certitude qu'il y a quelques mois,@Ilyas admin expliquait la procédure d'initialisation des statiques et mentionnait que les méthodes statiques et les champs statiques sont initialisés avec les variables globales au démarrage du programme MQL... allez plus loin et cherchez dans ses messages...

je ne suis pas prêt à argumenter et ne veux pas le faire, mais le texte d'aide représente le comportement des méthodes statiques

"private" - permet l'accès aux variables et aux méthodes d'une classe uniquement à partir des méthodes de cette classe. "

Où le mot "seulement" n'est-il pas clair ?

OnStart n'est pas une méthode de la classe A, selon l'exemple.

 
Aliaksandr Hryshyn:

"private" - permet l'accès aux variables et aux méthodes d'une classe uniquement à partir des méthodes de cette classe. "

Où le mot "seulement" n'est-il pas clair ?

OnStart n'est pas une méthode de la classe A, selon l'exemple.

Nous ne parlons pas du modificateur private, mais du modificateur static - faites des tests et voyez comment static se comporte dans MQL

 
Igor Makanu:

Je ne sais pas, mais je peux dire avec certitude qu'il y a quelques mois,@Ilyas admin expliquait la procédure d'initialisation des statiques et mentionnait que les méthodes statiques et les champs statiques sont initialisés avec les variables globales au démarrage du programme MQL... allez plus loin et cherchez dans ses messages...

je ne suis pas prêt à contester, mais le texte d'aide indique le comportement des méthodes statiques

Et imho, je ne pense pas qu'il soit nécessaire de confirmer avec des arguments - MQL se rapproche beaucoup du comportement des programmes C#, il a une situation similaire, de même que si le programmeur décide d'utiliser l'opérateur de résolution de contexte, cela signifie qu'il décline consciemment l'aide du compilateur pour identifier les violations de l'intégrité des données dans la classe, il y a des façons classiques d'obtenir des méthodes et des champs sans opérateur de résolution de contexte


UPD : J'ai décidé de réécrire ma bibliothèque MQL petit à petit, je suis horrifié de constater que j'écris comme je l'ai vu dans les codes MQL populaires les noms des méthodes et des champs qui coïncident avec les noms des mots réservés.... peut-être que c'est aussi une étape pour éviter l'aide du compilateur lors de la "rupture" des dépendances.... pas vraiment ))))

https://pikabu.ru/story/nevozmozhno_tak_nevozmozhno_2129852
 

?

c'est une situation étrange, tout ce qui est en dehors de la classe fonctionne depuis longtemps avec les staichiqs. et je ne fais qu'en faire tout un plat..... Juste pour le plaisir, reproduisez le code vous-même :

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()
{}
//+------------------------------------------------------------------+

Voyez-vous une instance d'objet ? et il existe dans MQL ;)

SZZ : Et elle existe au niveau de l'aide... c'est quoi ton problème avec moi ?

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

Le fait de ne pas pouvoir déclarer les membres d'une classe de manière statique entraînerait la nécessité de déclarer ces données au niveau du programme global. Cela romprait la relation entre les données et leur classe, et serait également incompatible avec le paradigme de base de la POO, qui consiste à combiner les données et les méthodes dans une classe pour les traiter. Un membre statique permet aux données de la classe qui ne sont pas spécifiques à une instance individuelle d'exister dans la portée de la classe.

 
Igor Makanu:

?

c'est une situation étrange, tout ce qui est en dehors de la classe fonctionne depuis longtemps avec les staichiqs. et je ne fais qu'en faire tout un plat..... Juste pour le plaisir, reproduisez le code vous-même :

Voyez-vous une instance d'objet ? et il existe dans MQL ;)

SZZ : Et cela existe au niveau de l'aide ... c'est quoi votre problème avec moi ?

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

pr


imp

Raison: