Fragen zu OOP in MQL5 - Seite 18

 

Können Sie mir sagen, worin der Unterschied besteht?
Ein Objekt oder einen Zeiger auf diese Weiseerstellen

class CClass
{
   public:


}CObj, *pCObj;

von der klassischen Kreatur

CClass  CObj;
CClass *CObj;

Ich bemerkte ein anderes Verhalten bei den Profis und begann mich zu fragen, warum, und die Literatursuche, ich weiß nicht einmal, wie ich den ersten Weg zum Suchen nennen soll.

 
Roman:

Können Sie mir sagen, inwiefern es anders ist?
Ein Objekt oder einen Zeiger auf diese Weiseerstellen

von der klassischen Kreatur

Ich habe ein anderes Verhalten bei den Pluspunkten festgestellt, und ich habe mich gefragt, warum, und die Literatursuche, ich weiß nicht einmal, wie ich die erste Möglichkeit, sie zu finden, nennen soll.

Es gibt keinen Unterschied, weder beim MMS noch bei den Pluszeichen.

 
Koldun Zloy:

Das ist nicht anders, weder bei MQLs noch bei Pluspunkten.

Sie haben die Frage nicht verstanden. Der Unterschied liegt nicht in den Sprachen, sondern in den Erklärungen selbst.
Ich verstehe das Verhalten des Objekts aus dem ersten Beispiel nicht.
Ich vermute, dass das Objekt auf die gleiche Weise auf dem Stack erstellt und nach dem Aufrufdes Destruktors der Klasse zerstört wird, und dass das Objekt global im Code sichtbar ist.
Das ist es, was ich klären wollte: Wie verhält sich die erste Methode?
Liege ich mit meiner Vermutung richtig?
Wie heißt es, um es in Google zu finden?

Ich habe nämlich festgestellt (nicht in mql, sondern in C++), dass sich das Verhalten der verwendeten Methoden nicht wie erwartet ändert, wenn man ein Objekt anders erstellt.

 
Roman:

Du verstehst die Frage nicht. Der Unterschied liegt nicht in den Sprachen, sondern in den Erklärungen selbst.
Ich verstehe das Verhalten des Objekts aus dem ersten Beispiel nicht.
Ich vermute, dass das Objekt auch auf dem Stack erstellt wird und nach dem Aufruf des Destruktors der Klasse zerstört wird und das Objekt im Code global sichtbar ist.
Das ist es, was ich klären wollte: Wie verhält sich die erste Methode?
Liege ich mit meiner Vermutung richtig?
Wie heißt es, damit ich es googeln kann?

Mir ist nämlich aufgefallen, dass sich das Verhalten in den verwendeten Methoden ändert, wenn man ein Objekt auf andere Weise erstellt, nicht wie erwartet.

Ich verstehe die Frage. In der Werbung gibt es keinen Unterschied.

 
Koldun Zloy:

Ich verstehe die Frage. In der Werbung gibt es keinen Unterschied.

Der Unterschied liegt höchstwahrscheinlich im Umfang.
Das erste Beispiel in einer Datei ist immer global sichtbar, das zweite oder neue Beispiel kann in einer Funktion ausgeblendet werden.

 
Roman:

Der Unterschied liegt höchstwahrscheinlich im Umfang.
Das erste Beispiel in einer Datei ist immer global sichtbar, das zweite oder neue Beispiel kann in einer Funktion ausgeblendet werden.

Der Unterschied besteht nicht darin, wie Sie sie anmelden, sondern wo.

 
Koldun Zloy:

Der Unterschied besteht nicht darin, wie Sie sich anmelden, sondern wo.

Auch ich bin durch logische Überlegungen zu diesem Schluss gekommen :))
Ich wollte sicher sein, dass meine Gedanken richtig waren. Ich danke Ihnen für die Klarstellung.

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

Ich habe überprüft, dass dieser Code für die Berechnung des Dezimalkommas nicht korrekt funktioniert

Im Grunde genommen funktioniert meine auch nicht immer richtig, das weiß ich.

ein Skript, um es zu überprüfen:

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

Ich habe das Skriptprotokoll beigefügt.

Dateien:
20190829.log  9 kb
 
Roman:

Können Sie mir sagen, worin der Unterschied besteht?
Ein Objekt oder einen Zeiger auf diese Weiseerstellen

von der klassischen Kreatur

Bei den Profis ist mir ein anderes Verhalten aufgefallen, und ich habe mich gefragt, warum, und die Literaturrecherche, ich weiß nicht einmal, wie ich die erste Art zu suchen nennen soll.

Ich persönlich sehe da auch keinen großen Unterschied, aber der Stil eines solchen Schreibens erscheint mir ziemlich gefährlich.

Der Zeiger muss sofort bei der Erstellung entweder gleich NULL oder dem Zeiger auf ein reales Objekt sein. Es wird ein kleiner Speicherbereich angelegt, in dem dieser Zeiger entweder mit einem Nullwert oder als normaler Zeiger gespeichert wird.

Bei der Deklaration eines Objekts hingegen wird das gesamte Objekt erstellt, der Konstruktor aufgerufen und Speicher zugewiesen.

 
Igor Makanu:

Ich habe überprüft, dass dieser Code bei der Berechnung des Dezimalkommas nicht korrekt funktioniert

Im Grunde genommen funktioniert meine auch nicht immer richtig, das weiß ich.

ein Skript, um es zu überprüfen:

Ich habe das Skriptprotokoll beigefügt.

Ich gehe davon aus, dass es nicht viel sein wird, etwa 0,15. Zumindest habe ich noch nichts davon gehört. Wenn ich plötzlich einen sehe, werde ich ihn neu machen.