Domande su OOP in MQL5 - pagina 18

 

Puoi dirmi in cosa differisce?
Creare un oggetto, o puntatore, in questo modo

class CClass
{
   public:


}CObj, *pCObj;

dalla creatura classica

CClass  CObj;
CClass *CObj;

Notato un comportamento diverso nei professionisti, ha iniziato a chiedersi perché, e la ricerca della letteratura, non so nemmeno come chiamare il primo modo di guardare.

 
Roman:

Puoi dirmi come è diverso?
Creare un oggetto, o puntatore, in questo modo

dalla creatura classica

Ho notato un comportamento diverso nei plus, mi sono chiesto perché, e la ricerca della letteratura, non so nemmeno come chiamare il primo modo di trovarla.

Non c'è differenza, né in MQL né in plus.

 
Koldun Zloy:

Non è diverso, sia nei MQL che nei plus.

Lei non capisce la domanda. La differenza non è nei linguaggi, ma nelle dichiarazioni stesse.
Non capisco il comportamento dell'oggetto del primo esempio.
La mia ipotesi è che l'oggetto sia creato allo stesso modo sullo stack e distrutto dopo che ildistruttore della classe è chiamato, e l'oggetto è visibile globalmente nel codice.
È quello che volevo chiarire, qual è il comportamento del primo metodo?
Ho indovinato?
Come si chiama per trovarlo in Google?

Perché ho notato (non in mql, ma in C++) che se si crea un oggetto in modo diverso, allora il comportamento nei metodi usati cambia, non come previsto.

 
Roman:

Lei non capisce la domanda. La differenza non è nei linguaggi, ma nelle dichiarazioni stesse.
Non capisco il comportamento dell'oggetto del primo esempio.
La mia ipotesi è che l'oggetto viene creato anche sullo stack e viene distrutto dopo aver chiamato il distruttore della classe e l'oggetto è globalmente visibile nel codice.
È quello che volevo chiarire, qual è il comportamento del primo metodo?
Ho indovinato?
Come si chiama per poterlo cercare su Google?

Perché ho notato che se si crea un oggetto in modo diverso, il comportamento nei metodi utilizzati cambia, non come previsto.

Capisco la domanda. Non c'è differenza nelle pubblicità.

 
Koldun Zloy:

Capisco la domanda. Non c'è differenza nelle pubblicità.

La differenza è molto probabilmente nella portata.
Il primo esempio in un file è sempre globalmente visibile, il secondo esempio o nuovo, può essere nascosto in una funzione.

 
Roman:

La differenza è molto probabilmente nella portata.
Il primo esempio in un file è sempre visibile globalmente, il secondo esempio o nuovo, può essere nascosto in una funzione.

La differenza qui non è come si dichiara, ma dove.

 
Koldun Zloy:

La differenza qui non è come si dichiara, ma dove.

Anch'io sono arrivato a questa conclusione con un ragionamento logico :))
Volevo essere sicuro che i miei pensieri fossero corretti. Grazie per il chiarimento.

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

Ho controllato, questo codice non funziona correttamente per calcolare il punto decimale

Fondamentalmente, anche il mio non funziona sempre correttamente, lo so.

uno script per controllarlo:

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

Ho allegato il log dello script.

File:
20190829.log  9 kb
 
Roman:

Puoi dirmi in cosa differisce?
Creare un oggetto, o puntatore, in questo modo

dalla creatura classica

Nei professionisti ho notato un comportamento diverso, mi sono chiesto perché, e la ricerca in letteratura, non so nemmeno come chiamare il primo modo di guardare.

Personalmente, non vedo molta differenza, ma lo stile stesso di tale scrittura mi sembra abbastanza pericoloso.

Il puntatore deve essere immediatamente, alla creazione, o uguale a NULL o al puntatore a un oggetto reale. Viene creato un piccolo spazio di memoria dove questo puntatore sarà memorizzato, sia con un valore nullo che come un normale puntatore.

La dichiarazione di un oggetto, invece, crea l'intero oggetto, chiamando il costruttore e allocando la memoria.

 
Igor Makanu:

Ho controllato, questo codice non funziona correttamente nel calcolo del punto decimale

Fondamentalmente, anche il mio non funziona sempre correttamente, lo so.

uno script per controllarlo:

Ho allegato il log dello script.

Ho un'ipotesi che non ci sarà molto, tipo 0,15. Almeno io non ne ho sentito parlare. Se ne vedo uno all'improvviso, lo rifarò.
Motivazione: