前回は 仮想関数 について解説しました。
改めて前回の内容をおさらいをしておくと、
- 仮想関数とは、「派生クラスでは、継承した関数の処理内容を少し変えたい」「大まかな処理内容だけ元のクラスで決めて、細かい処理内容は、各派生クラスで決めたい」という意図がある場合に用いる、関数のことである。
ということをお伝えしました。
今回は インスタンス という概念についてお話ししたいと思います。
インスタンスとは?
インスタンスについては、既に構造体、クラスの回で出てきており、その都度端的な説明はしてきました。↓
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()
{
}
インスタンスの使い方
インスタンスの宣言ができたら、構造体やクラスが晴れて使えるようになります。
でしたね。
そして、構造体やクラスにおける、個々の変数や関数のことをメンバと言います。
インスタンスの後ろにドット(.)をつけて、その後に呼び出したいメンバーの名前を記述します。
//クラスの宣言
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をそれぞれまずは生成しました。
OnStart関数内で、それぞれのインスタンスを記述後、ドット(.)を書き、それぞれのメンバを呼び出しています。↓
インスタンスは、必要に応じて複数個宣言することができます。
int型やdouble型、string型の変数が1個しか宣言できないなんてことはないですよね?
繰り返し述べている通り、インスタンスはクラスや構造体における変数名なわけですから、そこは同じ理屈が働きます。↓
インスタンスとコンストラクタの関係
コンストラクタについては、↓
MQL5 EA講座 第52回「クラスについて5 -コンストラクタ-」
で解説をしているので、未読の方は是非こちらも読んでいただければと思います。 <m(__)m>
コンストラクタというのは、「クラスのインスタンスの生成時に発動する関数」のことです。
普通のメンバ関数は、インスタンスを生成した後、個別に呼び出さなくてはいけないのですが、コンストラクタについてはインスタンスを生成した段階で関数処理を実施します。
↑はコンストラクタの講座記事でもお見せした動画ですが、注目していただきたいのは、イベントハンドラーであるOnStart関数で一切呼び出していないのにログ出力を実施しているところです。
このように、切り分けをしていただければと思います。
【超入門】MQL5 EA講座 第53回「クラスについて6 -仮想関数-」【EAの作り方】←
→【超入門】MQL5 EA講座 第55回「MQL5プログラムの全体構造について」【EAの作り方】
※ツイッターでも、インスタンスに関するつぶやきをまとめたモーメントを用意していますので、よろしければこちらも参考にしていただければ幸いです。
コメント