PLOです。アプリケーションの問題 - ページ 15 1...8910111213141516171819 新しいコメント TheXpert 2011.05.26 11:35 #141 デフォルトのコンストラクタは、そのクラスのオブジェクトの配列を初期化するという特定の目的を持っています。 すべてのパラメータがデフォルトに設定されたコンストラクタは 、 デフォルトのコンピュータではありません。 ツ。誤字を赤字で強調しました。ところで、このようなコンストラクタは、なぜデフォルトではコンストラクタにならないのでしょうか?もう一つの松葉杖? Rashid Umarov 2011.05.26 11:41 #142 TheXpert:デフォルトのコンストラクタは、そのクラスのオブジェクトの配列を初期化するという特定の目的を持っています。 すべてのパラメータがデフォルトに設定されたコンストラクタは 、 デフォルトのコンピュータとは言えません。 こちら 面白いタイプミスですね、ありがとうございます。修正しました。 TheXpert 2011.05.26 11:50 #143 Yedelkin: "無効なポインタへのアクセス" =="無効なポインタへのアクセスを試みている"? 多くの場合、手際が悪いか、ポインターを扱う基本原則を理解していないことの直接的な表れです。このような場合、クラスの使用法が十分に文書化されていないことの表れであることが少なくありません。 Slava 2011.05.26 11:55 #144 TheXpert: ところで、なぜこのコンストラクタはデフォルトのコンストラクタではないのでしょうか?もう一つの松葉杖? 全く逆です。松葉杖はデフォルトのパラメーターの存在で、これは見つけにくいバグの元となるからだ。ここが厳しいところです。 パラメータ付きのコンストラクタを書くと、パラメータなしのコンストラクタも書けるようになります。また、デフォルトのコンストラクタがある場合、すべてのデフォルトのパラメータを持つパラメトリックコンストラクタを書くことはできません。 TheXpert 2011.05.26 12:31 #145 stringo: デフォルトのパラメータを持つことは、バグを捕らえにくい原因になってしまうので、ひつようなのです。 そうですね......なんとなくですが、そういうシチュエーションが思い浮かばないんです。 また、デフォルトのコンストラクタがある場合、すべてのデフォルトパラメータを持つパラメトリックコンストラクタは書けません。 ああ、それなら正常で論理的ですね。そうでなければ、何か理解しがたい曖昧さがあったのです。 Yedelkin 2011.06.15 21:18 #146 コンテキスト解決操作( :: )について 読みました。関係ない2つのクラスで使ってみることにしました。//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class C_B; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class C_A { public: C_B *pointer; C_A(void) {}; ~C_A(void) {}; void funcA(int i) { Print("funcA(",i,")=",i); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class C_B { public: C_B(void) {}; ~C_B(void) {}; void funcB(int j) { Print("funcB(",j,")=",j); C_A::funcA(j); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { C_A object; object.pointer=new C_B(); object.pointer.funcB(5); delete object.pointer; } コンパイラはC_A::funcA(j)の行でエラーを出します。コメントアウトすると、うまくいくようです。私の間違いは何ですか? Victor Kirillin 2011.06.15 22:37 #147 Yedelkin:コンテキスト解決操作( :: )について 読みました。関係ない2つのクラスで使ってみることにしました。 C_A::funcA(j) の行でコンパイラがエラーを発生させました。コメントアウトすると、うまくいくようです。私の間違いは何ですか?あなたの場合、クラスC_Aのコンテキストは、クラスC_Bから利用できません。場合にのみ正しい。//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class C_B : public C_A { public: C_B(void) {}; ~C_B(void) {}; void funcB(int j) { Print("funcB(",j,")=",j); C_A::funcA(j); } }; でも、それなら可能です。 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class C_B : public C_A { public: C_B(void) {}; ~C_B(void) {}; void funcB(int j) { Print("funcB(",j,")=",j); funcA(j); } }; 一般に、このような呼び出しはオーバーロードされたメソッドに 使用されます。 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class C_B; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class C_A { public: C_B *pointer; C_A(void) {}; ~C_A(void) {}; void func(int i) { Print("C_A::func(",i,")=",i); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class C_B : public C_A { public: C_B(void) {}; ~C_B(void) {}; void func(int j) { Print("C_B::func(",j,")=",j); C_A::func(j); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { C_A object; object.pointer=new C_B(); object.pointer.func(5); delete object.pointer; } おおよそこのような感じです。 Yedelkin 2011.06.16 05:59 #148 uncleVic: あなたの場合、クラスC_Aのコンテキストは、クラスC_Bから利用できません。 ありがとうございます。つまり、コンテキスト解決操作は 継承されなくても適用できるというのは私の勘違いでした。 Yedelkin 2011.06.29 20:03 #149 あるクラスから別のクラスへメンバ値を「参照渡し」し、ディスクリプタを使おうとしています。どちらのオプションも有効なようです。ここでは、最もシンプルな方式を紹介します。class B { private: double d1; public: B(double &d) { d1=d; Print("class B, double d1=",d1); }; ~B(void){}; }; class A { public: double double_var; A *pointerA; A(void) : double_var(1.234567),pointerA(NULL) { SetPointer(); }; ~A(void) {if(CheckPointer(pointerA)==POINTER_DYNAMIC) delete pointerA; }; private: void SetPointer(void) { pointerA=GetPointer(this); } }; class C { public: A *pointerA_C; public: C(void) : pointerA_C(NULL) {}; ~C(void) {if(CheckPointer(pointerA_C)==POINTER_DYNAMIC) delete pointerA_C;}; void Printer() {if(CheckPointer(pointerA_C)!=POINTER_INVALID) Print("class C, double =",pointerA_C.double_var); }; }; void OnStart() { A objA; //---передаём значение double-переменной по ссылке B objB(objA.double_var); //---передаём значение double-переменной через описатель C objC; objC.pointerA_C=objA.pointerA; objC.Printer(); } この2つの方法のうち、どちらが早く効果が出るのでしょうか?どちらがより好ましいですか? Yedelkin 2011.06.30 13:40 #150 Yedelkin: あるクラスから別のクラスへメンバ値を「参照渡し」し、ディスクリプタを使おうとしています。どちらのバリエーションも有効なようです。ここでは、最もシンプルな方式を紹介します。 この2つの方法のうち、どちらが早く効果が出るのでしょうか?どちらがより好ましいですか? 質問は本当に重いのか・間違っているのか? 私は長い間、最初の方法(「リンクをたどる」)を使っていましたが、記述子の考え方はとても気に入っています。ただ、そのためにすべてのクラスを書き換える価値があるかどうかはわかりません。 1...8910111213141516171819 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
デフォルトのコンストラクタは、そのクラスのオブジェクトの配列を初期化するという特定の目的を持っています。 すべてのパラメータがデフォルトに設定されたコンストラクタは 、 デフォルトのコンピュータではありません。 ツ。
誤字を赤字で強調しました。
ところで、このようなコンストラクタは、なぜデフォルトではコンストラクタにならないのでしょうか?もう一つの松葉杖?
デフォルトのコンストラクタは、そのクラスのオブジェクトの配列を初期化するという特定の目的を持っています。 すべてのパラメータがデフォルトに設定されたコンストラクタは 、 デフォルトのコンピュータとは言えません。 こちら
"無効なポインタへのアクセス" =="無効なポインタへのアクセスを試みている"?
多くの場合、手際が悪いか、ポインターを扱う基本原則を理解していないことの直接的な表れです。
このような場合、クラスの使用法が十分に文書化されていないことの表れであることが少なくありません。
ところで、なぜこのコンストラクタはデフォルトのコンストラクタではないのでしょうか?もう一つの松葉杖?
全く逆です。松葉杖はデフォルトのパラメーターの存在で、これは見つけにくいバグの元となるからだ。ここが厳しいところです。
パラメータ付きのコンストラクタを書くと、パラメータなしのコンストラクタも書けるようになります。また、デフォルトのコンストラクタがある場合、すべてのデフォルトのパラメータを持つパラメトリックコンストラクタを書くことはできません。
デフォルトのパラメータを持つことは、バグを捕らえにくい原因になってしまうので、ひつようなのです。
そうですね......なんとなくですが、そういうシチュエーションが思い浮かばないんです。
また、デフォルトのコンストラクタがある場合、すべてのデフォルトパラメータを持つパラメトリックコンストラクタは書けません。
コンテキスト解決操作( :: )について 読みました。関係ない2つのクラスで使ってみることにしました。
コンパイラはC_A::funcA(j)の行でエラーを出します。コメントアウトすると、うまくいくようです。私の間違いは何ですか?
コンテキスト解決操作( :: )について 読みました。関係ない2つのクラスで使ってみることにしました。
C_A::funcA(j) の行でコンパイラがエラーを発生させました。コメントアウトすると、うまくいくようです。私の間違いは何ですか?
あなたの場合、クラスC_Aのコンテキストは、クラスC_Bから利用できません。
場合にのみ正しい。
でも、それなら可能です。
一般に、このような呼び出しはオーバーロードされたメソッドに 使用されます。
おおよそこのような感じです。
あなたの場合、クラスC_Aのコンテキストは、クラスC_Bから利用できません。
あるクラスから別のクラスへメンバ値を「参照渡し」し、ディスクリプタを使おうとしています。どちらのオプションも有効なようです。ここでは、最もシンプルな方式を紹介します。
この2つの方法のうち、どちらが早く効果が出るのでしょうか?どちらがより好ましいですか?
あるクラスから別のクラスへメンバ値を「参照渡し」し、ディスクリプタを使おうとしています。どちらのバリエーションも有効なようです。ここでは、最もシンプルな方式を紹介します。
この2つの方法のうち、どちらが早く効果が出るのでしょうか?どちらがより好ましいですか?
質問は本当に重いのか・間違っているのか?
私は長い間、最初の方法(「リンクをたどる」)を使っていましたが、記述子の考え方はとても気に入っています。ただ、そのためにすべてのクラスを書き換える価値があるかどうかはわかりません。