MQL5におけるOOPに関する質問 - ページ 14 1...789101112131415161718192021...96 新しいコメント Dmitry Fedoseev 2019.07.05 15:44 #131 TheXpert: もモデレーターに預けています。 誰が親権について言ったのか...が、2つのエキセントリックを持つキャラクター...。 Vladimir Simakov 2019.07.05 15:44 #132 TheXpert: また、モデレーターの指導のもとに 自分の投稿を削除したつもりだったのですが。 Dmitry Fedoseev 2019.07.05 15:48 #133 Vladimir Simakov: 自分の投稿を削除してしまったようです。 これは、関数内でnewによりオブジェクトを生成する場合の話である。元々は、既存のオブジェクトへのポインタを渡すという話でした。そして、ここでは、このように渡すことができます。 void f(CObj * obj){}。 Vasiliy Sokolov 2019.07.05 15:55 #134 Dmitry Fedoseev: また、関数内でオブジェクトを作成するためにポインタを渡す必要がある場合、そのように動作します。 class CObj{ public: int f(){ return(33); } }; CObj * obj; void OnStart(){ z(obj); delete(obj); } void z(CObj & o){ o = new CObj(); }以上、OOPについて知りたかったけど、怖くて聞けなかったことでした))) このコードは私のために端末をキックアウトしてくれます。せいぜいデバッグ時に重大なエラーが 発生する程度です(アニメーションは画像をクリックしてください)。 このような構成がコンパイラにスキップされるのは不思議なことです。 Roman 2019.07.05 15:58 #135 みんな、特に同じ土俵で争うのはやめようぜ。 ドミトリーは最初の例をエラーで出したが、それの何がいけないのか? Dim、はい、エラーなくコンパイルされますが、スクリプトを実行するとエラーが表示されます。 Vladimirがそれを修正し、ポインターを追加したところ、コードは正しく動作しました。 他に必要なものは?さて、誰が一番カッコイイか探さなきゃね( ´ ▽ ` )ノ) みんな、お互いを尊重し、傲慢な態度で人格や侮辱に頼らないでください。 Dimitriの初期例 class CObj{ public: int f(){ return(33); } }; CObj * obj; void OnStart(){ z(obj); delete(obj); } void z(CObj & o){ //тут пропущен указатель o = new CObj(); } ウラジミールによる訂正です。 void z(CObj* &o){ //добавлен указатель o = new CObj(); } 検証のため、メソッド結果をプリントアウトした私の修正箇所 この例で動作するようになりました。これ以上何が必要でしょうか? 誰がかっこいいかとか考えるのはやめてくれ、誰にでも誤字・脱字はある。 class CObj { public: int f(){return(33);} }; void z(CObj* &o) { o = new CObj(); Print(o.f()); } CObj * obj; //+------------------------------------------------------------------+ void OnStart() { z(obj); delete(obj); }この議論の過程で、コンパイラのエラーが確認されたようです。 なぜコンパイラは、Dmitriの最初の例のコンパイルをエラーなしでスキップするのでしょうか? Vladimir Simakov 2019.07.05 15:58 #136 Vasiliy Sokolov: このコードは私のために端末をキックアウトしてくれます。せいぜい、致命的な デバッグエラーが発生する程度です。 このような構成がコンパイラから渡されるのは不思議なことです。 ここでは、すべてがコンパイラに有効です。 プログラムデータセグメント内のオブジェクトへのポインタが作成され、コンパイル時に0x0が開始されます。 プロセッサへの必要なコマンドはコードセグメントで作成されます。 実行時には、z(...)関数のアドレスのスタック上にコマンドが発生します。 そして、そこに移動rdx [0x0] 。 また、NULLメモリアドレスへのアクセスは禁止されています。ヌルポインタのデリファレンスは、以下のように呼ばれます。 Vasiliy Sokolov 2019.07.05 16:00 #137 Vladimir Simakov: ここでは、すべてがコンパイラに有効です。 どのコンパイラー用ですか? Dmitry Fedoseev 2019.07.05 16:03 #138 Vasiliy Sokolov: このコードは私のために端末をキックアウトしてくれます。せいぜいデバッグ時に重大なエラーが 発生する程度です(アニメーションは画像をクリックしてください)。 このような構成がコンパイラにスキップされるのは不思議なことです。 私のはコンパイルして正しく動作しますが、完了時にメモリリーク(削除が効かない)のメッセージが表示されます。 Vasiliy Pushkaryov 2019.07.05 16:06 #139 Igor Makanu: 悪いことは今教えるから、良いことを教えてあげないとね ))) #define private protected fxsaberのコードに座ったのは無駄じゃなかったんですね。私には名作としか思えません。 Vasiliy Pushkaryov 2019.07.05 16:19 #140 誤報をお詫びします。先ほど、子クラスでCreate()メソッドを呼び出すことはできないと書きました。 今、再確認したところ、できます。しかし、プライベートメンバーm_buttonへのアクセスは不可能でした。つまり、例えばボタンの状態(押された/離された)を確認することは不可能でした。 イゴールさんのヒントで可能になりました。 #define private protected #include <Controls\Button.mqh> class CMyButton : public CButton { public: CMyButton(void){}; ~CMyButton(void){}; bool isPrevState; // состояние кнопки на предыд.тике, true - была нажата void setButton(); // создаем кнопку }; void CMyButton::setButton(void) { // метод Create() вызывается Create(0, "setBtn", 0, 50, 300, 150, 325); Text("setBtn"); m_button.State(); // работает когда включаем #define private protected } 1...789101112131415161718192021...96 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
もモデレーターに預けています。
誰が親権について言ったのか...が、2つのエキセントリックを持つキャラクター...。
また、モデレーターの指導のもとに
自分の投稿を削除してしまったようです。
これは、関数内でnewによりオブジェクトを生成する場合の話である。元々は、既存のオブジェクトへのポインタを渡すという話でした。そして、ここでは、このように渡すことができます。
void f(CObj * obj){}。
また、関数内でオブジェクトを作成するためにポインタを渡す必要がある場合、そのように動作します。
以上、OOPについて知りたかったけど、怖くて聞けなかったことでした)))このコードは私のために端末をキックアウトしてくれます。せいぜいデバッグ時に重大なエラーが 発生する程度です(アニメーションは画像をクリックしてください)。
このような構成がコンパイラにスキップされるのは不思議なことです。
ドミトリーは最初の例をエラーで出したが、それの何がいけないのか?
Dim、はい、エラーなくコンパイルされますが、スクリプトを実行するとエラーが表示されます。
Vladimirがそれを修正し、ポインターを追加したところ、コードは正しく動作しました。
他に必要なものは?さて、誰が一番カッコイイか探さなきゃね( ´ ▽ ` )ノ)
みんな、お互いを尊重し、傲慢な態度で人格や侮辱に頼らないでください。
Dimitriの初期例
ウラジミールによる訂正です。
検証のため、メソッド結果をプリントアウトした私の修正箇所
この例で動作するようになりました。これ以上何が必要でしょうか?
誰がかっこいいかとか考えるのはやめてくれ、誰にでも誤字・脱字はある。
この議論の過程で、コンパイラのエラーが確認されたようです。
なぜコンパイラは、Dmitriの最初の例のコンパイルをエラーなしでスキップするのでしょうか?
このコードは私のために端末をキックアウトしてくれます。せいぜい、致命的な デバッグエラーが発生する程度です。
このような構成がコンパイラから渡されるのは不思議なことです。
ここでは、すべてがコンパイラに有効です。
プログラムデータセグメント内のオブジェクトへのポインタが作成され、コンパイル時に0x0が開始されます。
プロセッサへの必要なコマンドはコードセグメントで作成されます。
実行時には、z(...)関数のアドレスのスタック上にコマンドが発生します。
そして、そこに移動rdx [0x0] 。
また、NULLメモリアドレスへのアクセスは禁止されています。ヌルポインタのデリファレンスは、以下のように呼ばれます。
ここでは、すべてがコンパイラに有効です。
どのコンパイラー用ですか?
このコードは私のために端末をキックアウトしてくれます。せいぜいデバッグ時に重大なエラーが 発生する程度です(アニメーションは画像をクリックしてください)。
このような構成がコンパイラにスキップされるのは不思議なことです。
私のはコンパイルして正しく動作しますが、完了時にメモリリーク(削除が効かない)のメッセージが表示されます。
悪いことは今教えるから、良いことを教えてあげないとね )))
fxsaberのコードに座ったのは無駄じゃなかったんですね。私には名作としか思えません。
誤報をお詫びします。先ほど、子クラスでCreate()メソッドを呼び出すことはできないと書きました。
今、再確認したところ、できます。しかし、プライベートメンバーm_buttonへのアクセスは不可能でした。つまり、例えばボタンの状態(押された/離された)を確認することは不可能でした。
イゴールさんのヒントで可能になりました。