MQL5におけるOOPに関する質問 - ページ 37

 
Koldun Zloy:

これは、すべて理解できる。SetSaveRequired()とGetSaveRequired()が非スタティックでありながら、スタティック変数に書き込む 理由は不明です。

私は直感的に操作できるモディファイアをあまり使いませんが、常にベストな解決策を求めます。

コードで試してみると、次のようになります。

//+------------------------------------------------------------------+
interface IStrategy
{  double      Strategy();
   bool        Finalize(); };
//+------------------------------------------------------------------+
class CStrategy: public IStrategy
{
public:
   bool              GetSaveRequired() { return(CStrategy::f_save_required); CStrategy::f_save_required = false;  }
protected:
   static bool       f_save_required;
   double            ProfitStrategy;
   void              SetSaveRequired() { CStrategy::f_save_required = true;                                       }
   void              RunStrategy();
   virtual void      NextStepStrategy();
   void              EndStrategy();
};

//____________________________________________________________________
void CStrategy::RunStrategy(void)
{  ProfitStrategy = 0.0;
   SetSaveRequired();
//...........    
}
//____________________________________________________________________
void CStrategy::EndStrategy(string func)
{ //...........    
   SetSaveRequired();
}
//____________________________________________________________________
#define CLASS(NAME) class NAME : public CStrategy{\
public:\
   NAME(SSettingsForOrder &set)  { m_setting = set;}\
   ~NAME()                       { delete m_order; }\
   virtual void NextStepStrategy();}
//+------------------------------------------------------------------+
CLASS(CStrategy_XXX);
CLASS(CStrategy_YYY);
CLASS(CStrategy_ZZZ);

void CStrategy_XXX::NextStepStrategy(void) { SetSaveRequired();   //...........     }
void CStrategy_YYY::NextStepStrategy(void) { SetSaveRequired();   //...........     }
void CStrategy_ZZZ::NextStepStrategy(void) { SetSaveRequired();   //...........     }


publicGetSaveRequired()は、このすべての動物園の戦略を管理するクラスで使用 されています。

このパターンで、私は唯一のメソッドNextStepStrategyを書く - それだけでTCの変更、他のすべては同じであり、したがって、ベースクラス CStrategyに 私はすべてのメソッドとすべてのフィールドを収集 - 彼らはあまりありません。

ZS:私の背中ではなく、エース私のコードを感じるが、それは間違いなく動作し、変数f_save_requiredの 重複を作成することはありません。

 
Igor Makanu:

私はモディファイアをほとんど使わず、もっと直感的に使っているのですが、いつも通りベストな解決策を求めます。

コードで試してみると、次のようになります。


publicGetSaveRequired()は、このすべての動物園の戦略を管理するクラスで使用 されています。

このパターンで、私は唯一のメソッドNextStepStrategyを書く - それだけでTCの変更、他のすべては同じであり、したがって、ベースクラス CStrategyに私はすべてのメソッドとすべてのフィールドを収集 - 彼らはあまりありません

ZS:私の背中ではなく、エース私のコードを感じるが、それは間違いなく動作し、変数f_save_requiredの 重複を作成することはありません。

私なら、これらの機能を完全に削除します。

構造を変えない関数はすべて定数にする。

定数でない関数はすべて書き込みフラグを設定する必要があります。

また、Save( int fileHandle ) 関数を追加します。この関数は、構造体を書き込み、フラグをリセットする必要があります。

フラグの状態を取得するスタティックな関数を作ればいいのです。

if( CStrategy::GetSaveRequired() )
{
   int fileHandle = FileOpen( ... );
   for( int i = 0; i < 10; i++ )
   {
      strategies[i].Save( fileHandle );
   }
   FileClose( fileHandle );
}
 
Koldun Zloy:

私なら、これらの機能を完全に削除します。

構造を変更しない関数はすべて定数にする。

定数でない関数はすべて書き込みフラグを設定する必要があります。

言っとくけど、一般的に修飾語は苦手なんだよ。


SZY:一方、プログラミングの議論のWebで一般的に何が起こっているか - ここに先月hubraにconstに関する記事があった、意味は - このconstは必要ありません、見てアセンブラコードはconstなしで違いはありません - コンパイラがそれをすべて取り去る(()。

 
Igor Makanu:

言っとくけど、一般的に修飾語は苦手なんだよ。

ググって、読んで、また何かが狂って......。

class A {
private:
  int x;
public:
  void f(int v) const { Print("const");                  }
  void f(const int v) { x = v; Print("(const) x = v ");  }
//  void f(int v)       { x = v; Print("x = v ");          } // 'f' - function already defined and has body     
};

A a;
//+------------------------------------------------------------------+
void OnStart()
{ 
   int y       = 1;
   const int z = 2;
   a.f(3);
   a.f(y);
   a.f(z); 
 }
//+------------------------------------------------------------------+

2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v

2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v

2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v

は、少なくとも一度はPrint("const") を取得することを期待した。
 
Igor Makanu:

ググって、読んで、また何かが狂って...。

2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v

2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v

2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v

は、少なくとも一度はPrint("const") を取得することを期待した。
class A {
private:
  int x;
public:
  void f(int v) const { Print("const");                  }
  void f(const int v) { x = v; Print("(const) x = v ");  }
//  void f(int v)       { x = v; Print("x = v ");          } // 'f' - function already defined and has body     
};

A a;
const A b;
//+------------------------------------------------------------------+
void OnStart()
{ 
   int y       = 1;
   const int z = 2;
   a.f(3);
   a.f(y);
   a.f(z);
   b.f(3);
   b.f(y);
   b.f(z);
 }
これは定数クラスのオーバーロードです。
 
Vladimir Simakov:
これは定数クラスのオーバーロードです。

うーん...そうか、30分近くかけてハブもフォーラムも読んだんだけど、コツがつかめなかったんだ。

ありがとうございます。

そんな例の疑惑が残っている。

class A {
private:
  int x;
public:
  void f(int v) const { Print("const");                  }
  const void f(int v) { x = v; Print("(const) x = v ");  }

};

A a;
const A b;
//+------------------------------------------------------------------+
void OnStart()
{ 
   int y       = 1;
   const int z = 2;
   a.f(3);
   a.f(y);
   a.f(z);
   b.f(3);
   b.f(y);
   b.f(z);
 }

2019.09.13 22:04:34.295 tst (EURUSD,H1) (const) x = v

2019.09.13 22:04:34.295 tst (EURUSD,H1) (const) x = v

2019.09.13 22:04:34.295 tst (EURUSD,H1) (const) x = v

2019.09.13 22:04:34.295 tst (EURUSD,H1) const

2019.09.13 22:04:34.295 tst (EURUSD,H1) const

2019.09.13 22:04:34.295 tst (EURUSD,H1) const


は同じ値を出したが、ポイントは全く違う?- そうなると、またホールの力が必要になってきます。
 
今、OOPの講義を受けているところなんです。何か役に立つことをお伝えできるかもしれません ))。
現在の講義をダウンロードすることができます。ここまではもちろん、些細なこと。
 
Nikolai Semko:
今、OOPの講義を受講しています。 多分、学んだことをシェアすることになると思います :))
現在の講義をダウンロードすることがあります。ここまではもちろん、些細なこと。

まあ、あなたの講義はちんぷんかんぷんでしょうし、こちらではロシア語はほとんど学べないし、インターネットは3周目だし......。 全体的な状況は、このフォーラムのような厳しいもので、本当のプログラマーは、リソースに10人以上おらず、残りはオタクです。

よし、全体的な状況はconstでクリアしたし、残りのモディファイで動いたから、理論的には ...応用しないといけないのですが、学生気分で )))。

 
Igor Makanu:

まあ、あなたの講義はちんぷんかんぷんでしょうし、こちらではロシア語はほとんど学べないし、インターネットは3周目だし......。全体的な状況は、このフォーラムのような厳しいもので、本当のプログラマーは、リソースに10人以上、残りはオタクです。

よし、全体的な状況はconstでクリアしたし、残りのモディファイで動いたから、理論的には ...学生気分で ))) 。

はい、私も似たような状況です。学ぶことは難しいことではなく、再訓練、古い習慣を断ち切ることが難しいのです。私はいまだに手続き型プログラミングの悪い習慣を捨てられないでいます。

 
Igor Makanu:

例が欲しいな、言っとくけど私は修飾語が全然ダメなんだ。


SZY:また、一般的にプログラミングの議論のWeb上で何が起こっているか恐ろしい - ここでは先月hubraにconstについての記事だった、意味は - はい、我々はこのconstを必要としない、見てアセンブラコードはconstなしでその違いはありません - コンパイラがすべてを削除します(((()。

定数や静力学のことは、とりあえず忘れていただいて結構です。インターフェースについても。

そして、すべての準備が整ったら、何かを静的、何かを定数として見てマークします。 そして、インターフェイスのことは完全に忘れることができます。