MQL5におけるOOPに関する質問 - ページ 82 1...757677787980818283848586878889...96 新しいコメント Alexandr Andreev 2020.06.13 17:25 #811 Igor Makanu:そこで何を初期化するかは問題ではなく、int 型であっても、この特定のコンストラクタを呼び出すための任意の数です。を選んだのは、誤植を避けるためで、任意の桁、つまり0.0を選びました。0 が、そういうわけでもない))) 今、普通にコードを見ただけで、まだ異常な見方があるのだ))) Igor Makanu 2020.06.13 17:26 #812 Alexandr Andreev:0 ノー 0.0としか書いていない - 他の数値は期待されていない - コンストラクタに変数さえない 一般に、おしゃれな作家のスタイルとして、もしかしたら、ベストではないかもしれない。 Vladimir Simakov 2020.06.13 17:35 #813 Alexandr Andreev:ポイントはx)ではなく、受け手にfloatが存在する可能性があり、0.0を指定するのも信頼性がないことです 0.0はコンパイラにとって曖昧さのないdouble、floatは0.fとなります。 Alexandr Andreev 2020.06.13 17:40 #814 Vladimir Simakov: 0.0はコンパイラにとって曖昧さのないdouble、floatは0.fとなります。 クレジット) Aleksey Mavrin 2020.06.13 20:27 #815 50歳以上の質問」のコーナーが開いている間に、私もキャストの話題に口を挟ませてください。 - フォールトトレランスやノンリダンダンシーの観点からコードを改善する方法には、どのようなものがありますか? -CheckPointer()!=POINTER_INVALIDのチェックは必要ですか?それとも絶対に 必要ないですか? その理由を説明してください。 - non-const に持っていくことで、const でないメソッドを呼び出すことができるようになる。Compareメソッド内でconstでないメソッドを直接呼び出すことはできますか? つまり、黄色くハイライトされた constを取り除くことができますか? #include <ChartObjects\ChartObjectsShapes.mqh> class CChartObjectRectangleX : public CChartObjectRectangle { public: void CChartObjectRectangleX(){}; virtual int Compare(const CObject *node,const int mode=0) const { CChartObjectRectangleX *n=NULL; const CChartObjectRectangleX*nc=dynamic_cast<const CChartObjectRectangleX*>(node); if(nc!=NULL) n=(CChartObjectRectangleX *) nc; if(n!=NULL) { if(mode==0) return CompareDate(n); if(mode==1) return CompareValue(n); }return 0; } virtual int CompareDate( CChartObjectRectangleX *node) const { //if(node!=NULL) return (this.Time(1)-node.Time(1)); return 0; } virtual int CompareValue( CChartObjectRectangleX *node) const { //if(node!=NULL) return ((this.Price(1)-node.Price(1))*10/Point()); return 0; } }; Vladimir Simakov 2020.06.13 21:59 #816 Aleksey Mavrin:50歳以上の質問」のコーナーが開いている間に、私もキャストの話題に口を挟ませてください。- フォールトトレランスやノンリダンダンシーの観点からコードを改善する方法には、どのようなものがありますか?- CheckPointer()!=POINTER_INVALIDのチェックは必要ですか?それとも絶対に 必要ないですか? その理由を説明してください。- non-const に持っていくことで、const でないメソッドを呼び出すことができるようになる。Compareメソッド内でconstでないメソッドを直接呼び出すことはできますか? つまり、黄色くハイライトされた constを取り除くことができますか? class CChartObjectRectangleX : public CChartObjectRectangle { public: virtual int Compare(const CObject *node,const int mode=0) const { const CChartObjectRectangleX *n=dynamic_cast<const CChartObjectRectangleX*>(node); return !n?0: mode==0?CompareDate(n):CompareValue(n);} virtual int CompareDate(const CChartObjectRectangleX *node) const {return !node?0:int(Time(1)-node.Time(1));} virtual int CompareValue(const CChartObjectRectangleX *node) const {return !node?0:(int)MathRound(((Price(1)-node.Price(1))*10/Point()));} }; 文字数が少ないだけで、あなたと同じようなものです。どちらが好きかは好みの問題ですが、私は余分な変数を削除しました(コンパイラも最適化フレームワークの中で削除すると思います)。 私の「!node」チェックについて。CheckPointer(node)==POINTER_INVALID に置き換えなければならないが、これはオーバーヘッド、つまり関数呼び出しである。インライン化されていても、少なくともデリファレンスとステータスフラグのチェックはしているのです。ライブラリやコンクリートだけで、Compareメソッドを使用するプログラムを書いた場合、無効なポインタに注意するために、より良い!nodeとonのコードです。ポインタに注意するのが面倒な場合や、劣等生のためのライブラリである場合は、 CheckPointer(node)==POINTER_INVALID だけにしてください。 強調表示した const 指定子を削除すると、定数オブジェクトから これらのメソッドを呼び出すことができなくなります。 UPD: ハイライトされたチェックは、呼び出されたメソッドにあるため、削除することができます。 Alexandr Andreev 2020.06.13 22:33 #817 Aleksey Mavrin:50歳以上の質問」のコーナーが開いている間に、私もキャストの話題に口を挟ませてください。- フォールトトレランスやノンリダンダンシーの観点からコードを改善する方法には、どのようなものがありますか?- CheckPointer()!=POINTER_INVALIDのチェックは必要ですか?それとも絶対に 必要ないですか? その理由を説明してください。- non-const に持っていくことで、const でないメソッドを呼び出すことができるようになる。Compare メソッドの中で const でないメソッドを直接呼び出すことはできますか? つまり、黄色くハイライトされた const を取り除くことができますか? 同じ関数のメソッドを const 本体のあるものとないもので2つ書くというもので、控えめに言っても、その価値はない)))) しかし、2つの方式に出会う確率は限りなくゼロに近い......。なぜなら、CChartObjectRectangle::Priceが 存在する可能性は-bodyにconstがなければ- ありえないと思うからです。 外部からこの関数を呼び出しても、何の効果もありません。つまり、constは内部関数でのみ動作し、オブジェクトのメモリに何も書き込まれなかった(変数の値が変更されなかった)ことを確認するのです。つまり、const...中にSet(a)を呼び出すことはできないのです。しばしば、何らかの混乱の中で、この関数が何も上書きしないことを確認するために、これらのconstを素早く設定することができます(これはおそらく私の削除ですが)。 後で何かを確認しやすくするために、constはget)))なしでちょうどどこにでも押し込むべきだと考えてください。 CheckPointer()!=POINTER_INVALID は、チェックが必要ですか? そして、なぜか...。ひとつにする bool Check(<template> &T) { retun CheckPointer(T)!=POINTER_INVALID } コンパイラはできるだけ単純にすることです。そして、さらに見栄えが良くなる。 より速くなりました。 int a[1000]; for (int i=0; i<ArraySize(a); i++).... или for (int i=ArraySize(a); i>=0; i--).... дак вот разницы не должно быть вообще まあ、あまり変わらなかったんですけどね。 template<typename T> bool Check(T *a) {return CheckPointer(a)!=POINTER_INVALID;}; class CChartObjectRectangleX : public CChartObjectRectangle { #define ME CChartObjectRectangleX public: void ME(){}; virtual int Compare(const CObject *node,const int mode=0) const { const ME*nc=dynamic_cast<const ME*>(node); return Check(nc)?mode==0?CompareDate(nc):CompareValue(nc):0; } virtual int CompareDate(const ME *node) const {return (this.Time(1)-node.Time(1));} virtual int CompareValue(const ME *node) const {return ((this.Price(1)-node.Price(1))*10/Point()); } #undef ME }; これはすべてあなたのコードです。 Alexandr Andreev 2020.06.13 22:33 #818 Vladimir Simakov:文字数が少ないだけで、皆さんと同じようです。そこで、好みの問題ですが、余分な変数を削除しました(もっとも、コンパイラは最適化の一環として削除しているはずです)。私の「!node」チェックについて。CheckPointer(node)==POINTER_INVALID に置き換えなければならないが、これはオーバーヘッド、つまり関数呼び出しである。インライン化されていても、少なくともデリファレンスとステータスフラグのチェックはしているのです。ライブラリやコンクリートだけで、Compareメソッドを使用するプログラムを書いた場合、無効なポインタに注意するために、より良い!nodeとonコード。ポインタに注意するのが面倒な場合や、劣等生のためのライブラリである場合は、 CheckPointer(node)==POINTER_INVALID だけにしてください。const指定を外すと、定数オブジェクトから これらのメソッドを呼び出すことができなくなります。 タブを開くのに時間がかかりました。 大学4年間はあまり知識の足しにはならなかったようです(説明はゴミ箱で遅れています)。 Alexandr Andreev 2020.06.13 23:13 #819 ベースクラスが入力パラメータへの参照を持たないため、constitution のない variant も正しく動作しますが、これは非常にスマートなスタイルとは言えません。 #include <ChartObjects\ChartObjectsShapes.mqh> template<typename T> bool Check(T *a) {return CheckPointer(a)!=POINTER_INVALID;}; class CChartObjectRectangleX : public CChartObjectRectangle { #define ME CChartObjectRectangleX public: void ME(){}; virtual int Compare(CObject *node,int mode=0) { ME*nc=dynamic_cast<ME*>(node); return Check(nc)?mode==0?CompareDate(nc):CompareValue(nc):0; } virtual int CompareDate(ME *node) {return (this.Time(1)-node.Time(1));} virtual int CompareValue(ME *node) {return ((this.Price(1)-node.Price(1))*10/Point()); } #undef ME }; Alexandr Andreev 2020.06.13 23:17 #820 また、同コードのバリエーション。 template<typename T> bool Check(T *a) {return CheckPointer(a)!=POINTER_INVALID;}; class CChartObjectRectangleX : public CChartObjectRectangle { #define ME CChartObjectRectangleX public: void ME(){}; virtual int Compare(CObject *node,int mode=0) {return Check(node)?mode==0?CompareDate(node):CompareValue(node):0;} virtual int CompareDate(CObject *node) {return ( Time(1)-dynamic_cast<ME*>(node).Time(1));} virtual int CompareValue(CObject *node) {return ((Price(1)-dynamic_cast<ME*>(node).Price(1))*10/Point()); } #undef ME }; コンストラクターと同じものです。 template<typename T> bool Check(T *a) {return CheckPointer(a)!=POINTER_INVALID;}; class CChartObjectRectangleX : public CChartObjectRectangle { #define ME CChartObjectRectangleX public: void ME(){}; virtual int Compare(CObject const *node,int const mode=0) const{return Check(node)?mode==0?CompareDate(node):CompareValue(node):0;} virtual int CompareDate(CObject const *node) const{return ( Time(1)-dynamic_cast<const ME*>(node).Time(1));} virtual int CompareValue(CObject const *node) const{return ((Price(1)-dynamic_cast<const ME*>(node).Price(1))*10/Point()); } #undef ME }; 1...757677787980818283848586878889...96 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そこで何を初期化するかは問題ではなく、int 型であっても、この特定のコンストラクタを呼び出すための任意の数です。
を選んだのは、誤植を避けるためで、任意の桁、つまり0.0を選びました。
0
が、そういうわけでもない))) 今、普通にコードを見ただけで、まだ異常な見方があるのだ)))0
ノー
0.0としか書いていない - 他の数値は期待されていない - コンストラクタに変数さえない
一般に、おしゃれな作家のスタイルとして、もしかしたら、ベストではないかもしれない。
ポイントはx)ではなく、受け手にfloatが存在する可能性があり、0.0を指定するのも信頼性がないことです
0.0はコンパイラにとって曖昧さのないdouble、floatは0.fとなります。
クレジット)
50歳以上の質問」のコーナーが開いている間に、私もキャストの話題に口を挟ませてください。
- フォールトトレランスやノンリダンダンシーの観点からコードを改善する方法には、どのようなものがありますか?
-CheckPointer()!=POINTER_INVALIDのチェックは必要ですか?それとも絶対に 必要ないですか? その理由を説明してください。
- non-const に持っていくことで、const でないメソッドを呼び出すことができるようになる。Compareメソッド内でconstでないメソッドを直接呼び出すことはできますか? つまり、黄色くハイライトされた constを取り除くことができますか?
50歳以上の質問」のコーナーが開いている間に、私もキャストの話題に口を挟ませてください。
- フォールトトレランスやノンリダンダンシーの観点からコードを改善する方法には、どのようなものがありますか?
- CheckPointer()!=POINTER_INVALIDのチェックは必要ですか?それとも絶対に 必要ないですか? その理由を説明してください。
- non-const に持っていくことで、const でないメソッドを呼び出すことができるようになる。Compareメソッド内でconstでないメソッドを直接呼び出すことはできますか? つまり、黄色くハイライトされた constを取り除くことができますか?
文字数が少ないだけで、あなたと同じようなものです。どちらが好きかは好みの問題ですが、私は余分な変数を削除しました(コンパイラも最適化フレームワークの中で削除すると思います)。
私の「!node」チェックについて。CheckPointer(node)==POINTER_INVALID に置き換えなければならないが、これはオーバーヘッド、つまり関数呼び出しである。インライン化されていても、少なくともデリファレンスとステータスフラグのチェックはしているのです。ライブラリやコンクリートだけで、Compareメソッドを使用するプログラムを書いた場合、無効なポインタに注意するために、より良い!nodeとonのコードです。ポインタに注意するのが面倒な場合や、劣等生のためのライブラリである場合は、 CheckPointer(node)==POINTER_INVALID だけにしてください。
強調表示した const 指定子を削除すると、定数オブジェクトから これらのメソッドを呼び出すことができなくなります。
UPD: ハイライトされたチェックは、呼び出されたメソッドにあるため、削除することができます。
50歳以上の質問」のコーナーが開いている間に、私もキャストの話題に口を挟ませてください。
- フォールトトレランスやノンリダンダンシーの観点からコードを改善する方法には、どのようなものがありますか?
- CheckPointer()!=POINTER_INVALIDのチェックは必要ですか?それとも絶対に 必要ないですか? その理由を説明してください。
- non-const に持っていくことで、const でないメソッドを呼び出すことができるようになる。Compare メソッドの中で const でないメソッドを直接呼び出すことはできますか? つまり、黄色くハイライトされた const を取り除くことができますか?
同じ関数のメソッドを const 本体のあるものとないもので2つ書くというもので、控えめに言っても、その価値はない))))
しかし、2つの方式に出会う確率は限りなくゼロに近い......。なぜなら、CChartObjectRectangle::Priceが 存在する可能性は-bodyにconstがなければ- ありえないと思うからです。
外部からこの関数を呼び出しても、何の効果もありません。つまり、constは内部関数でのみ動作し、オブジェクトのメモリに何も書き込まれなかった(変数の値が変更されなかった)ことを確認するのです。つまり、const...中にSet(a)を呼び出すことはできないのです。しばしば、何らかの混乱の中で、この関数が何も上書きしないことを確認するために、これらのconstを素早く設定することができます(これはおそらく私の削除ですが)。
後で何かを確認しやすくするために、constはget)))なしでちょうどどこにでも押し込むべきだと考えてください。
CheckPointer()!=POINTER_INVALID は、チェックが必要ですか?
そして、なぜか...。ひとつにする bool Check(<template> &T) { retun CheckPointer(T)!=POINTER_INVALID } コンパイラはできるだけ単純にすることです。そして、さらに見栄えが良くなる。
より速くなりました。
まあ、あまり変わらなかったんですけどね。
これはすべてあなたのコードです。
文字数が少ないだけで、皆さんと同じようです。そこで、好みの問題ですが、余分な変数を削除しました(もっとも、コンパイラは最適化の一環として削除しているはずです)。
私の「!node」チェックについて。CheckPointer(node)==POINTER_INVALID に置き換えなければならないが、これはオーバーヘッド、つまり関数呼び出しである。インライン化されていても、少なくともデリファレンスとステータスフラグのチェックはしているのです。ライブラリやコンクリートだけで、Compareメソッドを使用するプログラムを書いた場合、無効なポインタに注意するために、より良い!nodeとonコード。ポインタに注意するのが面倒な場合や、劣等生のためのライブラリである場合は、 CheckPointer(node)==POINTER_INVALID だけにしてください。
const指定を外すと、定数オブジェクトから これらのメソッドを呼び出すことができなくなります。
タブを開くのに時間がかかりました。
大学4年間はあまり知識の足しにはならなかったようです(説明はゴミ箱で遅れています)。
ベースクラスが入力パラメータへの参照を持たないため、constitution のない variant も正しく動作しますが、これは非常にスマートなスタイルとは言えません。
また、同コードのバリエーション。
コンストラクターと同じものです。