Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 94

 
Vikon:
Es geht um den Aufruf einer Funktion innerhalb einer Klasse: wie private: public:, wie man Daten an die Klasse übergibt und wie man ein Ergebnis von der Klasse erhält. Das war's bisher!

Innerhalb der Klasse muss das Ergebnis irgendwie berechnet werden. Und wie soll die Klasse ohne Ihre Beteiligung verstehen, dass sie das Ergebnis jetzt zurückgeben muss, aber nicht zu einem anderen Zeitpunkt?

Sie benötigen also eine Methode innerhalb der Klasse, die von außen aufgerufen werden kann. Sie muss also öffentlich sein.

Natürlich können Sie auch eine private Methode erstellen, die alle Daten innerhalb der Klasse liest und in die Klassenvariable schreibt, und die öffentliche Methode ruft die private Methode auf. Aber irgendeine Methode muss trotzdem aufgerufen werden. Und was dort in der privaten Methode gezählt wird, wie komplex die Berechnungen sein werden und welche Variablen in die Berechnungen einfließen werden - alles nach Ihrem Ermessen und auf Ihre eigene Verantwortung.

 
Vikon:
Das ist der Punkt, wie man eine Funktion innerhalb einer Klasse aufruft, nämlich wie private: public:, wie man Daten an eine Klasse übergibt und wie man das Ergebnis von der Klasse erhält. So weit, so gut!
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      inputA=1;
input int      inputB=3;

class ASD
  {
private:
   // Здесь располагаются переменные и функции, доступные только внутри класса
public:
   int Add(int a,int b)
     {
      Print(__FUNCTION__,": Результат сложения: a",a," + b",b," = ",a+b);
      return(a+b);
     }
  } ar;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ar.Add( inputA, inputB );
  }
//+------------------------------------------------------------------+
Scheint zu funktionieren, ich habe nicht überprüft, ob es richtig ist)
 
Alexey Kozitsyn:
Ich denke, es sollte funktionieren, ich habe es nicht überprüft, um zu sehen, ob es richtig ist)

Hier, danke, ich fange schon an, mich zu bewegen -

das Drehbuch:

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   ar.sf ();
  }

Klasse:

class ASD
  {
private:
  int d;
  int g (int a_s,int a_d){d=a_s+a_d;return (d=a_s+a_d); }
public:
void fg (int a_s,int a_d)  { g (a_s,a_d); }
void sf ()                 {Alert (d);}
  };

Alert liefert ein Ergebnis von 8, aber es ist eine Meldung der Klasse, und ich brauche jetzt eine Meldung des Skripts

 
Vikon:

Bitte sehr, danke, ich fange schon an, mich zu bewegen -

das Drehbuch:

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   ar.sf ();
  }

Klasse:

class ASD
  {
private:
  int d;
  int g (int a_s,int a_d){d=a_s+a_d;return (d=a_s+a_d); }
public:
void fg (int a_s,int a_d)  { g (a_s,a_d); }
void sf ()                 {Alert (d);}
  };

Alert liefert ein Ergebnis von 8, aber es ist eine Meldung der Klasse, und jetzt brauche ich eine Meldung des Skripts

Ok, Sie deklarieren eine Alert() -Methode in der Klasse und nennen sie ar.Alert(), obwohl die sf()-Methode jetzt dasselbe tut. Ich bin mir nicht ganz sicher, was Sie sehen wollen, nachdem Sie einen Wert in das Feld d geschrieben haben?
 
Alexey Kozitsyn:
Ok, Sie deklarieren die Methode Alert() in der Klasse und nennen sie ar.Alert(), obwohl die Methode sf() jetzt dasselbe tut. Ich bin mir nicht ganz sicher, was Sie sehen wollen, nachdem Sie einen Wert in das Feld d geschrieben haben?
Wenn Sie den Wert von d erhalten möchten, ohne die Methode sf() aufzurufen, müssen Sie eine öffentliche Methode int GetD() const { return( d ); } hinzufügen. Und schreiben Sie in das Skript Alert( ar.GetD() );
 
Alexey Kozitsyn:
Sieht so aus, als sollte es funktionieren, habe es aber noch nicht überprüft)

Alle! Ich danke Ihnen vielmals! Ich hab's.

Drehbuch:

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   Alert ( ar.sf ());
  }

Klasse:

class ASD
  {
private:
  int d;
  int g   (int a_s,int a_d)  {return (d=a_s+a_d); }
public:
  void fg (int a_s,int a_d)  { g (a_s,a_d); }
  int sf  ()                 {return (d);}    
  
  };


Ich werde darauf herumkauen!

 

Ich kann mich nicht erinnern, wer mir in diesem Thread geschrieben hat, dass der Tester kaputt ist, aber ich kann antworten, dass er genauso gut kaputt sein könnte. Sie verschlingt entweder verschiedene Zeitabschnitte oder beginnt die Zählung ab einem beliebigen Abschnitt (obwohl alle Anführungszeichen vorhanden sind).

Ich denke, wer es sehen muss, wird es verstehen.

 
Guten Tag, könnten Sie mir bitte sagen, ob die MRoubd-Funktion von MSDN
importiert werden kann?
(gibt eine Zahl zurück, die auf ein Vielfaches eines gegebenen Wertes aufgerundet ist)

oder wie man rundet, z. B. 2285,13 als Vielfaches von (0,25) 2285,00 __ 2285,25 ___ 2285,50 ___ 2285,75
 
Wie erfahre ich die Hebelwirkung eines Paares, nicht eines Kontos?
 
SAMER:
Wie kann ich die Hebelwirkung eines Paares und nicht eines Kontos ermitteln?

Die Höhe der bereitgestellten Hebelwirkung:

long liverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
Grund der Beschwerde: