MQL5におけるOOPに関する質問 - ページ 43

 
Igor Makanu:

SZS:あなたの記事はほとんど常に合理的ですが、材料のプレゼンテーション、よく、正確に善意ではなく、もちろんあなたのビジネスが、イミフ、あなたが助けたい - 助け、賢くなりたい、まあ、それはしばしばそのように判明する。

と思わせるようなピッチで...。コードを考えるようになったと書かれていますが、以前は思いつきでコーディングしていたのに...。

 
A100:

と思わせるようなピッチで...。を考え始めたと書いていますが、それ以前は慌ててコーディングしていましたね。

ふむまあ、私はドジを踏んだことはないんですけどね(笑)。- じょうだんじゃない

SZZY:私が定期的にトピックを更新するのは、無知だからでも、自分で資料が見つからないからでもなく、その意見に興味を持ったエージェントがいるからです ;)

ZSYS:通信の結果 - むしろ修飾子を使用する理由を再考し、なぜ我々は取得/セットを必要とする - それは書かれたコードをテストし、コンパイラの巧みな使用で、開発の段階で時間を節約することはすぐに成功するでしょう - ここでは本当にトピック内の資産だった目を開き、もう一度、ありがとうございました

 
Koldun Zloy:

以下はその一例です。

あなたのコードからは、何のためのインターフェースなのかがわからないので、捨てました。

もちろん、あなたのタスクを完全に把握しているわけではありませんが、99.99%の確率で必要ありません。

悪い...

 
Igor Makanu:

あの...ぼけっと書いたことないんですけど!?- じょうだんじゃない

SZZY:私がこのトピックを定期的に更新するのは、無知からでもなく、自分で資料を見つけられないからでもなく、私が興味を持った意見を持つアセッサーがいるからです ;)

SZZY:通信の結果 - むしろ修飾子を使用する理由を再考し、なぜ我々は/セットを取得する必要があります - それは書かれたコードをテストし、コンパイラの巧みな使用で、開発段階での時間を節約することはすぐに成功するでしょう - ここでは本当にトピック内の資産だった目を開き、もう一度、ありがとうございます

勉強になったようで、とてもよかったです。でも、StroustrupのC++を読めば、もっともっと上達しますよ。

でも、Habraに関する記事や様々な動画は読まない方が良いですよ。そこに誰でも書き込むことができる。あなたを混乱させるだけです。

 

という疑問が湧いてきました。


ボタンが並んだパネルがあり、それぞれのボタンが何らかの機能を実行します。ボタンの一つを押して呼び出される関数、仮にExit 1とします、は別のクラスCExit 1に置きます。

しかし、これらの関数は、いくつかのグローバル変数や 他のオブジェクトのメソッドを使用しています。

大きなプロジェクトに参加したことはない。専門家の意見を聞きたいのですが、どうすれば正しくできるのでしょうか?

私は、mq4ファイルをコンパイルすると、すべてのクラスとインクルードファイルがエラーなくロードされ、EAが正常に動作するようにプログラミングすることがよくあります。しかし、クラスを個別にコンパイルすると、一部の外部変数や関数が表示されないため、警告が表示されます。

ここで質問です。クラスは、エラーなくコンパイルされなければならないのでしょうか?つまり、EAのグローバル変数やオブジェクト参照など、使用するすべてのコピーを含んでいなければならないのでしょうか?その場合、いつ頃がベストなのでしょうか?相互作用するオブジェクトがたくさんある場合、どのように並べれば混乱が少ないか?プログラムが増殖した場合、ダイアグラムを作成するのでしょうか?

オブジェクトを使った作業の書き方や実装方法を共有する。

 
Vasiliy Pushkaryov:

という疑問が湧いてきました。


ボタンが並んだパネルがあり、それぞれのボタンが何らかの機能を実行します。ボタンの一つを押して呼び出される関数、仮にExit 1とします、は別のクラスCExit 1に置きます。

しかし、これらの関数は、いくつかのグローバル変数や 他のオブジェクトのメソッドを使用しています。

大きなプロジェクトに参加したことはない。専門家の意見を聞きたいのですが、どうすれば正しくできるのでしょうか?

私は、mq4ファイルをコンパイルすると、すべてのクラスとインクルードファイルがエラーなくロードされ、EAが正常に動作するようにプログラミングすることがよくあります。しかし、クラスを個別にコンパイルした場合、一部の外部変数や関数がクラスから見えないため、警告が表示されることがあります。

という疑問があります。クラス自体がエラーなくコンパイルできること、つまり、グローバル変数やオブジェクトへの参照など、使用されているすべてのコピーをすでに含んでいることが必要なのでしょうか?その場合、いつ頃がベストなのでしょうか?相互作用するオブジェクトがたくさんある場合、どのように並べれば混乱が少ないか?プログラムが増殖した場合、ダイアグラムを作成するのでしょうか?

オブジェクトを使った作業の書き方や実装方法を共有する。

プラットフォーム固有のものを除いたグローバル変数や統計は邪道です。そして、すべてのエンティティ(クラスのグループ)は隔離され、プロトコル(インターフェイスのそれ)に従って互いに通信しなければならず、それ以外の何ものでもありません。

もちろん、これが理想です :-)実生活では、自分の企画、アイデア、スタイルを知っている人はいないので、自分で判断し、自分でサポートします。

 
struct A
{
   int x,y;
};

//+------------------------------------------------------------------+
void OnStart()
{
   A a,b,c;
   a.x = 1;
   a.y = 2;
   b = a;
   c = a;
   //b = c = a;  //'operator=' - parameter passed as reference, variable expected
}

1. なぜ、コンパイルができない のか?

2. operator= , を記述して、その中でネイティブのコピー演算子を使うハックはないのでしょうか?すなわち、::=を 呼び出す何らかの方法です。

 
Igor Makanu:

1.なぜ、コンパイルができないのか?
2. operator= , を記述して、その中でネイティブのコピー演算子を使うハックはないのでしょうか? ....すなわち、::=を 呼び出す何らかの方法です。

1) MQLのデフォルトの代入演算子は、voidデータ型を 返します。
2)このようなことができます。

struct A{
   int x,y;
   
   A(){}
   A(const A &a){
      this.x = a.x;
      this.y = a.y;
   }
   A operator=(const A &a){
      this.x = a.x;
      this.y = a.y;
      return a;
   }
};

void OnStart(){
   A a,b,c;
   a.x = 1;
   a.y = 2;
   b = a;
   c = a;
   b = c = a;  
}
 
Sergey Dzyublik:

1) MQLのデフォルトの代入演算子は、voidデータ型を 返します。

は同意しない。

struct A
{
   int x[];
};
//+------------------------------------------------------------------+
A myfunc(const int size)
{
   A result;
   ArrayResize(result.x, size);
   for(int i = 0; i < size; i++) result.x[i] = i + 1;
   return(result);
}
//+------------------------------------------------------------------+
void OnStart()
{
   A a;
   a = myfunc(5);
   A b;
   b = a;            // скопировали
   b.x[0] = 99;      // изменили 1-й элемент, чтобы убедиться, что это копия а, а не ссылка как в C#
   ArrayPrint(a.x);
   ArrayPrint(b.x);
}
//+------------------------------------------------------------------+

2020.04.18 18:54:03.855 tst (EURUSD,H1) 1 2 3 4 5

2020.04.18 18:54:03.855 tst (EURUSD,H1) 99 2 3 4 5


明らかにデフォルトの代入演算子は完全なデータ型を 返し、コピーを作る、あるいはどのようなvoidについて話しているのでしょうか?


2. 例は良いのですが、デフォルトのコピー演算子による配列構造でのコピーの可能性を残したいのです。

 
Igor Makanu:

デフォルトの代入演算 子は明らかに完全なデータ型を返して コピーを作っている、とか、どこのボイドだ?

間違っている。

これを返すoperator=を定義するだけで、その違いがわかるはずです。

課題の結果が再度割り当てられたときに見ることができます。

struct A
{
   int x;
   int y;
   
   A operator=( const A& a )
   {
      x = a.x;
      y = a.y;
      
      return this;
   }
};

void OnStart()
{
   A a,b,c;
   a.x = 1;
   a.y = 2;
   b = a;
   c = a;
   b = c = a;
}