PLOです。アプリケーションの問題 - ページ 2

 
Urain:

new演算 子はクラスのインスタンスを生成し、それに連動してコンストラクタが呼び出されます。構文に書かれているので、それ以外に呼び出す方法はない。

この例から進めていきました。

//+------------------------------------------------------------------+
//| Создание фигуры                                                  |
//+------------------------------------------------------------------+
void CTetrisField::NewShape()
  {
   m_ypos=HORZ_BORDER;
//--- случайным образом создаём одну из 7 возможных фигур
   int nshape=rand()%7;
   switch(nshape)
     {
      case 0: m_shape=new CTetrisShape1; break;
      case 1: m_shape=new CTetrisShape2; break;
      case 2: m_shape=new CTetrisShape3; break;
      case 3: m_shape=new CTetrisShape4; break;
      case 4: m_shape=new CTetrisShape5; break;
      case 5: m_shape=new CTetrisShape6; break;
      case 6: m_shape=new CTetrisShape7; break;
     }
大雑把に言うと、ここには括弧(コンストラクタの呼び出し)はありません。まだ何か見落としている可能性があります。
 
Urain:

このコードは、多重継承とほとんど変わりません。

実際、C_Cクラスは適切なポインタを通じてC_A、C_Bデータにアクセスできる。


これをアグリゲーションと呼びます
 
Yedelkin:

私はこの例を参考にさせていただきました。

ここでは、大雑把に言うと、括弧がない(コンストラクタ呼び出し)。まだ理解していないことがあるのかもしれません。

なぜ私が、それは私のためではない、それは中央の洗濯のために、私はブラケットを取らなかった:o)
 
Urain:
なぜ私なのか、それは私のためではなく、中央の洗濯機のためです、私は括弧を使いませんでした :o)

私のコンパイラは、括弧の欠落について文句を言わないのですが......。

      case  50: d_Control=new CControl_50; break;

ともあれ、ふと疑問がわきました。それとも、ブラケットがあってもなくても、違いはないのでしょうか?

 
Yedelkin:

私のコンパイラは、括弧の欠落について文句を言わないのですが......。

ともあれ、ふと疑問が湧いた。それとも、ブラケットがあってもなくても変わりはないのでしょうか?

両方使えるのであれば、むしろ構文統一の問題です。スピードに影響を与えないというのが大きなポイントです。

ZS そして、その効果は全くないのでしょうか? 正直なところ、私はいつも括弧をつけて書いているので、確認していません。

 
Urain:

両方使えるとなると、むしろ構文統一の問題ですね。スピードに影響を与えないことが最大のポイントです。

ZS 全然効かないんですか? 正直言って、いつもカッコで書いているので、確認していないんです。

今のところ、コンパイルの結果についてしかお話できません。実際にコードが動くかどうかを確認するのは、まだ先の話です。
 

MQL5でクラスオブジェクトを 動的に生成する記述は読んでいませんが、C++では括弧なし(標準のコンストラクタが呼ばれる)、括弧あり(括弧内のパラメータに応じてコンストラクタが呼ばれる)が可能です。例


class CExample
{
    int param;
public:
    CExample();
    CExample(int x);
    ~CExample();
}

CExample::CExample(int x)
{
    param = x;
}

//..........вызов..............
//..где-то в тексте программы..

   CExample *ex1 = new CExample;         //создание с конструктором CExample();
   CExample *ex1 = new CExample();       //создание с конструктором CExample();
   CExample *ex1 = new CExample(value);  //создание с конструктором CExample(int x);

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
mql5では、コンストラクタにパラメータを渡すことができません。
 
Vigor:
mql5では、まだコンストラクタにパラメータを渡すことができません。

mql5 では、まだ コンストラクタにパラメータを渡すことができません" を明確にする。
 
PiramidaR:

MQL5でクラスオブジェクトを 動的に生成する記述は読んでいませんが、C++では括弧なし(標準のコンストラクタが呼ばれる)、括弧あり(括弧内のパラメータに応じてコンストラクタが呼ばれる)が可能です。例

了解です。シンプルでわかりやすい説明をありがとうございました。括弧は可能なパラメータ用であることが判明した。

また、MQL5で動的なクラスオブジェクトを作成する方法についての説明は非常に簡潔です。

MQL5 リファレンス / 言語の基礎 / 演算子 / オブジェクト作成演算子 new

MQL5リファレンス / 言語の基礎 / データ型 / オブジェクトポインタ