記事"MQL5でのオブジェクトポインターの使用"についてのディスカッション - ページ 4 12345 新しいコメント TheXpert 2014.11.06 08:57 #31 tol64: セキュリティホールは見つかったか?) 直接キャストするのは邪道だ。プラスにはこの目的のために特別にdynamic_castがあるが、ここでは完全に正しくキャストすることはできないし、暗黙の深刻なエラーの原因になる可能性がある。また、深刻さという点では、安全でないポインタや参照よりもはるかに優れているとは言えません。 Anatoli Kazharski 2014.11.06 08:58 #32 denkir:ポリモーフィズムを 使った方がいいのでは?おおよそそうです:それは、継承クラスCChartObjectRectLabel、CChartObjectButton、CChartObjectEditには、アクセスする必要のある独自のメソッドがあるということです。そして、標準ライブラリの基底クラスCChartObjectは 、同じ仮想メソッドを持っていません。 Anatoli Kazharski 2014.11.06 09:04 #33 上記の私の例では... メソッドにアクセス できますか?...それは次のようになります://--- objects[0].// CChartObjectEditクラスのメソッドにアクセスするには? // 1. Print("((CChartObjectEdit *)objects[0]).BackColor(): ",((CChartObjectEdit *)objects[0]).BackColor()); //--- 2. CChartObjectEdit *e=(CChartObjectEdit *)objects[0]; Print("e.BackColor(): ",e.BackColor()); //--- オブジェクト[1]。// CChartObjectButtonクラスのメソッドにアクセスするには? // 1. Print("((CChartObjectButton *)objects[1]).State(): ",((CChartObjectButton *)objects[1]).State()); //--- 2. CChartObjectButton *b=(CChartObjectButton *)objects[1]; Print("b.State(): ",b.State()); //--- objects[2].// CChartObjectRectLabel クラスのメソッドにアクセスするには? // 1. Print("((CChartObjectRectLabel *)objects[2]).BackColor(): ",((CChartObjectRectLabel *)objects[2]).BackColor()); //--- 2. CChartObjectRectLabel *r=(CChartObjectRectLabel *)objects[2]; Print("r.BackColor(): ",r.BackColor()); Anatoli Kazharski 2014.11.06 09:24 #34 TheXpert: そうだね。このように直接キャストするのは正統派ではありません。プラスにはこの目的のために特別にdynamic_castが あるが、ここでは完全に正しくキャストすることはできないし、暗黙の深刻なエラーの原因になる可能性がある。また、深刻なことに、安全でないポインタや参照よりもはるかに優れているわけではありません。このフォーラムで質問する前に、ネットでC++にはdynamic_cast 演算子(動的 データ識別のメカニズム)があることを知りました。今、上のリンクを見ています:// 動的なデータ型識別の仕組みは、ポリモーフィックなデータ型に対してのみ有効である。 // クラス(すなわち、少なくとも1つの仮想メンバ関数を含むクラス)これは必須条件なのですね?また、基底クラスに仮想メソッドがない場合、dynamic_castは 機能しないのでしょうか?追伸 >> dynamic_castについては こちら(MSDN)を読んでいます。 Renat Fatkhullin 2014.11.06 09:55 #35 TheXpert: くそ、そのあとで言語安全性について語るのか?あなたはおそらく、C/C++のように何でも自由にキャストできると考えているのだろう。そうではないし、安全性には何の問題もない。 Anatoli Kazharski 2014.11.06 12:41 #36 Renat:おそらく、C/C++のように何にでも自由にキャストできると思っているだろう。そうではないし、安全性に問題はない。私は偶然このエラーに遭遇した。)2014.11.06 14:33:36.588 OOP_Test (EURCHF,M5) incorrect casting of pointers in 'Test1.mqh' (931,13) TheXpert 2014.11.06 14:36 #37 Renat:安全性に問題はありません。 いいえ、通常コンパイル時にdynamic_castチェックを行うことはできません。 Renat Fatkhullin 2014.11.06 14:48 #38 TheXpert: いいえ、コンパイル時にdynamic_castを正しくチェックすることはできません。上のコメントは、rantimeでの キャスト・チェックの結果を示しています。これは非常に厳格で、RTTIメカニズムで動作し、ゴーストの場合に誰が誰であるかが 正確にわかるからだ。 TheXpert 2014.11.06 17:07 #39 Renat:上のコメントは、rantimeでの キャスティング・チェックの結果を示している。 おっと...。混乱した。コンパイラかと思った。では撤回します。 alwaysmlie4u 2018.09.21 03:06 #40 チュートリアルのおかげで、ポリモーフィズムを理解することができました。ありがとうございました。 12345 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
セキュリティホールは見つかったか?)
ポリモーフィズムを 使った方がいいのでは?
おおよそそうです:
それは、継承クラスCChartObjectRectLabel、CChartObjectButton、CChartObjectEditには、アクセスする必要のある独自のメソッドがあるということです。そして、標準ライブラリの基底クラスCChartObjectは 、同じ仮想メソッドを持っていません。
上記の私の例では...
メソッドにアクセス できますか?
...それは次のようになります:
そうだね。このように直接キャストするのは正統派ではありません。プラスにはこの目的のために特別にdynamic_castが あるが、ここでは完全に正しくキャストすることはできないし、暗黙の深刻なエラーの原因になる可能性がある。また、深刻なことに、安全でないポインタや参照よりもはるかに優れているわけではありません。
このフォーラムで質問する前に、ネットでC++にはdynamic_cast 演算子(動的 データ識別のメカニズム)があることを知りました。
今、上のリンクを見ています:
これは必須条件なのですね?また、基底クラスに仮想メソッドがない場合、dynamic_castは 機能しないのでしょうか?
追伸 >> dynamic_castについては こちら(MSDN)を読んでいます。
くそ、そのあとで言語安全性について語るのか?
あなたはおそらく、C/C++のように何でも自由にキャストできると考えているのだろう。
そうではないし、安全性には何の問題もない。
おそらく、C/C++のように何にでも自由にキャストできると思っているだろう。
そうではないし、安全性に問題はない。
私は偶然このエラーに遭遇した。)
安全性に問題はありません。
いいえ、コンパイル時にdynamic_castを正しくチェックすることはできません。
上のコメントは、rantimeでの キャスト・チェックの結果を示しています。
これは非常に厳格で、RTTIメカニズムで動作し、ゴーストの場合に誰が誰であるかが 正確にわかるからだ。
上のコメントは、rantimeでの キャスティング・チェックの結果を示している。