ホーム » MQL5でEA作ろう講座 » 【超入門】MQL5 EA講座 第54回「インスタンス(オブジェクト)について」【EAの作り方】
a

【超入門】MQL5 EA講座 第54回「インスタンス(オブジェクト)について」【EAの作り方】

MQL5でEA作ろう講座

前回は 仮想関数 について解説しました。

改めて前回の内容をおさらいをしておくと、

ということをお伝えしました。

今回は インスタンス という概念についてお話ししたいと思います。

スポンサーリンク

インスタンスとは?

インスタンスについては、既に構造体クラスの回で出てきており、その都度端的な説明はしてきました。↓

MQL5 EA講座 第22回「構造体」

MQL5 EA講座 第48回「クラスについて1-クラスとは?-」

従って、「改めて1つの単元として取り上げる必要もないかな?」とも思ったのですが、逆にいえば、その都度出てくる程、大事な概念でもあるため、復習とまとめを兼ねて、今回改めて取り上げる事にしました。

インスタンスとは、構造体クラスなどを実際に利用する時に宣言する変数名のようなものです。

インスタンスのことは、「オブジェクト」とも言ったりもしますが、MQL4やMQL5において「オブジェクト」というと、チャート上に表示する描画物の事を想起しがちなので、このサイトでは、なるべくインスタンスという言葉を使いたいと思います。

例えばint型double型string型変数を宣言する場合、↓

int 変数名;
double 変数名;
string 変数名;

このようになりますよね?

構造体クラスも、データ型の1つです。int型double型string型との違いは、データの種類を自身でカスタマイズできる事だ、というのは構造体クラスそれぞれの記事で既に書いてきました。

int型double型string型を使うのに変数名を宣言する必要があるように、クラス構造体を利用する時には、インスタンス名を宣言する必要がある、ということです。

struct 構造体名
{
   //メンバを記述
};

構造体名 インスタンス名;

class クラス名
{
   //メンバを記述
};

クラス名 インスタンス名;

↑構造としてはこんな感じですね。

実際のコードに落とし込むと↓のようになります。

//クラスの宣言
class exampleClass
{
  
   public:
  int publicInteger;
  
};


//クラスインスタンスの宣言
exampleClass exClass;

//構造体の宣言
struct exampleStructure
{
  int exampleInteger;
};

//構造体インスタンスの宣言
exampleStructure exStructure;

void OnStart()
{
}

上記のサンプルコードで言えば「exampleClass」がintやdoubleといったデータ型で、exClass(これがインスタンスになる訳ですが)が変数名と読み替えることもできます。↓

構造体クラスは、ある種の設計図のようなものであり、それ自体は具体的なデータを持ちません。

インスタンスを作成することで、その設計図に基づいた実際のオブジェクトがメモリ上に生成され、具体的なデータや状態を保持できるようになるわけです。

スポンサーリンク

インスタンスの使い方

インスタンスの宣言ができたら、構造体クラスが晴れて使えるようになります。

しつこいようですが、もう一度前提を確認

構造体は、複数の変数をまとめあげたものであり、

クラス変数関数をまとめあげたもの

でしたね。

そして、構造体クラスにおける、個々の変数関数のことをメンバと言います。

クラス構造体メンバを呼び出すには、

インスタンスの後ろにドット(.)をつけて、その後に呼び出したいメンバの名前を記述します。

//クラスの宣言
class exampleClass
{
  
   public:
  int publicInteger1;
  int publicInteger2;
  int publicInteger3;
  void publicFunction(){Print(publicInteger1);};
  
};


//クラスインスタンスの宣言
exampleClass exClass;

//構造体の宣言
struct exampleStructure
{
  int exampleInteger;
  double exampleDouble;
  string exapleString;
};

//構造体インスタンスの宣言
exampleStructure exStructure;

void OnStart()
{
   //クラスインスタンスからメンバの呼び出し
   exClass.publicFunction();
   exClass.publicInteger1;
   
   //構造体インスタンスからメンバの呼び出し
   exStructure.exampleDouble;
   exStructure.exampleInteger;

}

クラスインスタンスであるexClass、構造体インスタンスであるexStructureをそれぞれまずは生成しました。

———————————

※サンプルコード内で宣言した「exampleClass」クラスの{}内に書かれている「public」というのはアクセス指定子です。アクセス指定子とは、クラス内の変数関数メンバ)の利用有効範囲(アクセスレベル)を決めるためのものです。

詳細については以下の記事をご参照ください。

MQL5 EA講座 第50回「クラスについて3 -アクセス指定子-」

———————————

OnStart関数内で、それぞれのインスタンスを記述後、ドット(.)を書き、それぞれのメンバを呼び出しています。↓

インスタンスは、必要に応じて複数個宣言することができます

int型double型string型変数が1個しか宣言できないなんてことはないですよね?

繰り返し述べている通り、インスタンスクラス構造体における変数名なわけですから、そこは同じ理屈が働きます。↓

スポンサーリンク

インスタンスとコンストラクタの関係

コンストラクタについては、↓

MQL5 EA講座 第52回「クラスについて5 -コンストラクタ-」

で解説をしているので、未読の方は是非こちらも読んでいただければと思います。 <m(__)m>

コンストラクタというのは、「クラスインスタンスの生成時に発動する関数」のことです。

普通のメンバは、インスタンスを生成した後、個別に呼び出さなくてはいけないのですが、コンストラクタについてはインスタンスを生成した段階で関数処理を実施します。

↑はコンストラクタの講座記事でもお見せした動画ですが、注目していただきたいのは、イベントハンドラーであるOnStart関数で一切呼び出していないのにログ出力を実施しているところです。

このように、切り分けをしていただければと思います。

スポンサーリンク

まとめ

今回は インスタンス について解説しました。

今回の記事では以下のことを学びました

今回は以上になります。

最後までお読みいただきありがとうございました<m(__)m>

※なお、インスタンスを使ったEAの具体的な記述例については、

第110回「インジケータ取得クラスに派生クラスを追加する」

で解説予定です。

【超入門】MQL5 EA講座 第53回「クラスについて6 -仮想関数-」【EAの作り方】

【超入門】MQL5 EA講座 第55回「MQL5プログラムの全体構造について」【EAの作り方】

コメント

タイトルとURLをコピーしました