Questions sur la POO dans MQL5 - page 86

 
Igor Makanu:

qui a du sens

mais je soupçonne que le but est de l'utiliser avec des méthodes statiques.

J'ai besoin de le tester, mais je ne sais pas comment, donc j'ai demandé


UPD : j'ai cherché ce sujet sur Google hier, et j'ai trouvé beaucoup de mentions du destructeur privé.

Les méthodes statiques n'ont pas de pointeur this, et ne peuvent rien faire avec ce pointeur.

Le destructeur privé garantit que l'objet sera supprimé par l'objet lui-même. Mais comme je l'ai dit plus haut, ce n'est pas une bonne pratique à éviter à mon avis (même si, parfois, c'est assez pratique, et dans PLUSIEURS cas, il est acceptable de l'utiliser).

 
Georgiy Merts:

Les méthodes statiques n'ont pas de pointeur this et ne peuvent rien faire avec ce pointeur.

J'ai peut-être mal compris votre message, mais je suis conscient que la méthode ne dispose pas d'un pointeur sur celui-ci, seule l'instance de l'objet lui-même le fait, j'ai écrit parce que de la méthode statique des champs de classe sont disponibles, et très probablement vous pouvez manipuler avec la suppression.

le but est de regarder cette conception, je n'ai jamais essayé, et ce n'est pas une façon commune


Sergey Dzyublik:

1) Depuis les méthodes statiques, l'accès est interdit.
Où est "delete &this ;" ? - https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2) Le destructeur privé interdit de créer un objet sur la pile, mais on peut toujours le créer par l'intermédiaire de l'opérateur new, cette fois dans le tas :

Voici une autre utilisation de delete &this.

Merci, je vais vérifier, c'est utile.




occupé, tout en réparant, je demanderai plus tard... juste à titre indicatif, que se passe-t-il si une classe de base possède une méthode avec

delete &this;

et à partir d'une classe dérivée appeler une méthode avec la classe de base retirée.... aucun but pratique, mais pour l'instant je veux le comprendre

 
Igor Makanu:

J'ai peut-être mal compris votre message, mais je suis conscient que la méthode n'a pas de pointeur this, seule l'instance de l'objet lui-même en a un, je l'ai écrit parce que les champs de la classe sont disponibles à partir de la méthode statique, et très probablement vous pouvez manipuler avec suppression

jusqu'à présent, le but de l'examen de cette conception, je n'ai jamais essayé et ce n'est pas un moyen commun.


Merci, je vais vérifier, c'est utile.




Occupé, tout en réparant, je demanderai plus tard... juste à titre indicatif, que se passe-t-il si une classe de base a une méthode avec

et à partir d'une classe dérivée appeler une méthode avec la classe de base retirée.... aucun but pratique, mais pour l'instant je veux le comprendre

Pas la peine, vous n'en aurez jamais besoin.

Vous devez comprendre les bases de la langue avant de vous occuper de ce genre de choses.

 
Koldun Zloy:

Pas la peine, vous n'en aurez jamais besoin.

Ce n'est pas une affirmation correcte, si vous n'élargissez pas vos horizons, bien sûr vous n'en aurez pas besoin.

Koldun Zloy:

Vous devez comprendre les bases de la langue avant de vous attaquer à ce genre de choses.

Je le fais autant que je peux, mais en général, je résous 90+% des tâches MQL à partir de zéro, la plupart d'entre elles sont déjà résolues et librement accessibles.



concernant la suppression de &this ; ... ... j'ai utilisé un ordre de classe qui surveillait son ouverture et qui, aux requêtes, pouvait rouvrir l'ordre ... ... et bien d'autres choses encore,

j'ai créé et supprimé cet objet (classe order) d'une autre classe, je trouverais peut-être plus pratique d'utiliserdelete &this;...

 

Je me demande s'il s'agit d'un bug ou d'une fonctionnalité)

Il existe une structure à l'intérieur de l'instance de la classe.

Je mets un point pour voir le contenu de la structure.
Mais il ne s'affiche que si je mets des crochets.
Bien que la structure soit dans une seule instance.

le problème est résolu si la classe n'est pas un élément du tableau.




et le code lui-même pour "fouiller".

class ABC
{   
   public:         
           struct ST
           {    
              int r;
              int U;
                  ST() {r=0; U=0;}           
           };
           ST st;
};
ABC abc[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {

abc[0].st.r;

   return(INIT_SUCCEEDED);
  }
 
Pavel Verveyko:

Je me demande s'il s'agit d'un bug ou d'une fonctionnalité)

Il existe une structure à l'intérieur de l'instance de la classe.

Je mets un point pour voir le contenu de la structure.
Mais il ne s'affiche que si je mets des crochets.
Bien que la structure soit dans une seule instance.

le problème est résolu si la classe n'est pas un élément du tableau.




et le code lui-même pour "fouiller".

cela pourrait être juste :-)

 
Maxim Kuznetsov:

c'est probablement vrai :-)

peut-être) mais cela ne change pas le point concernant l'info-bulle)

 
Pavel Verveyko:

Je me demande s'il s'agit d'un bug ou d'une fonctionnalité)

Il existe une structure à l'intérieur de l'instance de la classe.

Je mets un point pour voir le contenu de la structure.
Mais il ne s'affiche que si je mets des crochets.
Bien que la structure soit dans une seule instance.

le problème est résolu si la classe n'est pas un élément du tableau.




et le code lui-même pour "piquer"

Un autre bug de l'éditeur(
 

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html

Везде, где это возможно, заменяйте глобальные переменные локальными.

Il faut plus de commandes pour accéder aux variables globales que pour accéder aux variables locales. En outre, sauf indication contraire explicite, le compilateur suppose que la sous-routine appelée peut modifier les valeurs de toutes les variables globales. Ainsi, après l'appel de la sous-routine, les valeurs de toutes les variables globales sont chargées en mémoire de manière répétée, ce qui entraîne une dégradation des performances.


Si vous devez accéder à une variable globale (qui n'est pas partagée par ce fil et d'autres), copiez sa valeur dans une variable locale et travaillez avec la copie.

L'utilisation d'une copie locale permet un gain de performance, sauf lorsque la variable globale n'est accédée qu'une seule fois.


Si dans mon exemple :

class CEA
{
private:
   double            _Ask, _Bid;
public:
   void              onTick(const MqlTick &tick);
};
//+------------------------------------------------------------------+
void CEA::onTick(const MqlTick &tick)
{
   _Ask = tick.ask;
   _Bid = tick.bid;
}

dans la méthode onTick(), copiez les valeurs ask et bid et utilisez _Ask, _Bid (transaction virtuelle) dans le reste des méthodes.

Est-ce que ce sera comme travailler avec des variables globales ?

ZS : comme une option, bien sûr je peux passer par référence &tick dans toutes les méthodes, mais encore une fois, des questions, ce qui est plus efficace

 
Igor Makanu:

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html


si dans mon exemple :

copier les valeurs asc et bid dans la méthode onTick() et utiliser _Ask, _Bid (transaction virtuelle) dans le reste des méthodes

Est-ce que ce sera comme travailler avec des variables globales ?

ZS : comme option, je peux bien sûr passer par référence &tick à toutes les méthodes, mais encore une fois, je me demande ce qui est le plus efficace

Igor Makanu:

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html


Si dans mon exemple :

dans la méthode onTick(), copier les valeurs de l'asc et de l'enchère et utiliser _Ask, _Bid (transaction virtuelle) dans d'autres méthodes.

Est-ce que ce sera comme travailler avec des variables globales ?

ZS : comme option, bien sûr je peux passer par référence &tick dans toutes les méthodes, mais encore une fois, questions ce qui est plus efficace

Question. Quel est l'intérêt de la chèvre ? Si dans une méthode, une classe, dans un cheval sphérique, oui dans un vide physique (enfin je suis bourré)))), alors oui, c'est logique. Et si dans un vrai projet, soit une classe au niveau global, soit une seule qui gère tout ce trichomudin (désolé pour le bourbon))))) supplémentaire au début du handler, et, demande directement à partir de celui-ci à n'importe quel endroit))).
Raison: