MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 507

 
lil_lil:

MTFインジケータ、外部設定にH1を入れて、M15チャートに貼り付けています。バー4で信号が点滅します。H1バーを閉じたときは信号が点滅せず、M15では4バーで信号の点滅が停止します。したがって、i+Nは、設定で選択した期間と、インジケータを取り付けた期間のチャートによって、Nが変化するように計算する必要があります。

全コードをお持ちですか?

 

こんにちは。OOP謝罪派の方、解りませんので宜しくお願いします。

そこで、例えばCCandleというクラスがあります。このクラスでは、このクラスのすべてのオブジェクトに対して同じパラメータが存在することになります。これらのパラメータはOnInit()で初期化することもでき、このクラスのすべてのオブジェクトで同じになります。では、どのようにすれば、新しいオブジェクトを作成するときに毎回初期化されることがないように、正しく行うことができるのでしょうか。これらをすべてCCandle::Init()関数に入れたとします。解らないんです。

 
Juer:

こんにちは。OOPの謝罪者さん、解らないので助けてください。

例えばCCandleのようなクラスがあります。このクラスでは、このクラスのすべてのオブジェクトに対して同じパラメータが存在することになります。これらのパラメータは、OnInit()で初期化することもでき、このクラスのすべてのオブジェクトで同じになります。では、どのようにすれば、新しいオブジェクトを作成するときに毎回初期化されることがないように、正しく行うことができるのでしょうか。これらをすべてCCandle::Init()関数に入れたとします。解らないんです。

これは、クラスのコンストラクタに ある初期化リストで行われます。

class CCandle
{
   int      m_nA;
   double   m_fB;
   datetime m_dtC;


   void CCandle::CCandle(void);
};

CCandle::CCandle(void)
            : m_nA(0)
            , m_fB(0.0)
            , m_dtC(0)
{
}
 
Juer:

こんにちは。OOP謝罪派の方、解りませんので宜しくお願いします。

そこで、例えばCCandleというクラスがあります。このクラスでは、パラメータはこのクラスのすべてのオブジェクトで同じになります。これらのパラメータはOnInit()で初期化することもでき、このクラスのすべてのオブジェクトで同じになります。では、どのようにすれば、新しいオブジェクトを作成するときに毎回初期化されることがないように、正しく行うことができるのでしょうか。これらをすべてCCandle::Init()関数に入れたとします。解らないんです。

クラス内にパラメトリックコンストラクタを作成し、オブジェクトを初期化するために必要なパラメータを渡します。
 
何も理解できなかった。オブジェクトに対する初期化は問題ない。与えられたクラスのすべてのオブジェクトに対して一度だけ初期化するにはどうすればよいですか?つまり、新しいオブジェクトを作成するたびにパラメータを初期化する必要がなく、すでに値が初期化されている。
 
同僚、ループ本体からreturn演算 子を使用することが正しいかどうか助言してください?例えば、ループを持つ関数があるとします。ある瞬間に何らかの値を返して、その結果、関数を終了する必要があります。正しくは、break を使用してからreturn(value) を使用します。しかし、すぐにreturn(value)を使っていいのだろうか?
 
Juer:
何も理解できなかった。オブジェクトに対する初期化は問題ない。与えられたクラスのすべてのオブジェクトに対して一度だけ初期化するにはどうすればよいですか?つまり、新しいオブジェクトを作成するたびにパラメータを初期化する必要がなく、すでに値が初期化されている。
パラメータは、存在するものから初期化することができます。
 
lsv107:
同僚、ループ本体からreturn演算 子を使用することが正しいかどうか助言してください?例えば、ループを持つ関数があるとします。ある瞬間に何らかの値を返して、その結果、関数を終了する必要があります。正しくは、break を使用してからreturn(value) を使用します。しかし、一度にreturn(value)だけで良いのだろうか?
ループから抜けることを妨げるものは何もない。
 
Artyom Trishkin:
パラメータは、存在するものから初期化することができます。

なんだか、素朴な疑問ですね。ポイントは、同じものを初期化することです。

 
Artyom Trishkin:
ループから抜けるのを止めるものはない。

ただ、関数内部でループがアクティブなまま、return演算子が アクティブなループからコールポイントに制御を移すだけだと、その関数が再度呼ばれたときにスタックオーバーフローの危険がある(再帰)ので、それを恐れていたのです。これはまさにPascalの場合であり、構造プログラミングのルールでは、ループは一つずつ終了させ、その後に関数を終了させるべきものであった。returnが、関数とともに、ループを終了させるのであれば、素晴らしいことですが、長い休みの後、プログラミングに戻ったので、明確にするべきだったのです。