オブジェクト指向プログラミングPart2 コンストラクタとデストラクタ MQL5
コンストラクタとデストラクタ
コンストラクタとはオブジェクトが生成されたときに1度だけ実行されるメソッドで、デストラクタはオブジェクトが消去されたときに実行されるメソッドです。前回作成したクラスにコンストラクタとデストラクタを書き加えて、その動作を確認していきます。
実行されるタイミング | |
---|---|
コンストラクタ | オブジェクト生成時 |
デストラクタ | オブジェクト消去時 |
コンストラクタ、デストラクタの書き方
実際にコードを書いてみると
class CRen{
private:
int AI;
public:
int get_AI() { return AI; };
void set_AI(int ai) { AI = ai; };
CRen(){ Print("コンストラクタ"); } // コンストラクタ
~CRen(){ Print("デストラクタ"); } // デストラクタ
};
int OnInit()
{
CRen ren; // オブジェクト生成
ren.set_AI( 1234 );
Print( ren.get_AI() );
return(INIT_SUCCEEDED);
}
このプログラムを実行すると↓
コンストラクタとデストラクタが動作の最初と最後に実行されていることがわかります。
今度はOnInit関数ではなくOnTick関数でクラスを呼び出してみます。
class CRen{
private:
int AI;
public:
int get_AI() { return AI; };
void set_AI(int ai) { AI = ai; };
CRen(){ Print("コンストラクタ"); } // コンストラクタ
~CRen(){ Print("デストラクタ"); } // デストラクタ
};
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnTick()
{
CRen ren; // オブジェクト生成
ren.set_AI( 1234 );
Print( ren.get_AI() );
}
このプログラムを実行すると↓
OnTick関数は1ティックごとに実行される関数なのでオブジェクト生成/消去も1ティックごとに起こります。そのため1ティックごとにクラスのコンストラクタとデストラクタが実行されることになります。
メソッドの宣言と定義付けを分けて書く
メソッドの宣言とと定義を分けて書くことも可能です。クラス内部のメソッドをたくさん作りたい。もしくはメソッドの内容が長くなるときは、メソッドの宣言とと定義を分けて書くとコードが見やすくなったりします。
書き方
実際にコードを書いてみると
class CRen{
private:
int AI;
public:
int get_price(); // メソッドの宣言
};
// メソッドの定義付け
int CRen::get_price(void)
{
AI = 100 + 20;
return AI;
}
int OnInit()
{
CRen ren; // オブジェクト生成
Print( ren.get_price() );
return(INIT_SUCCEEDED);
}
コンストラクタとデストラクタもクラスの外部で定義付けしてみる
コンストラクタとデストラクタの場合はメソッドの定義で型をつける必要がありません。そのほかに書き方に違いはありません。
class CRen{
private:
int AI;
double SA;
public:
int get_AI() { return AI; };
void set_AI(int ai) { AI = ai; };
CRen(); // コンストラクタ
~CRen(); // デストラクタ
};
CRen::CRen(void)
{
SA = iClose(_Symbol,PERIOD_CURRENT,0);
Print("コンストラクタ 現在の価格は ",SA);
}
CRen::~CRen(void)
{
Print("デストラクタ SAの値は ",SA," AIの値は ",AI);
}
int OnInit()
{
CRen ren; // オブジェクト生成
ren.set_AI( 1234 );
Print( ren.get_AI() );
return(INIT_SUCCEEDED);
}
続きを読むときはこちら
オブジェクト指向プログラミングPart3 →
Author And Source
この問題について(オブジェクト指向プログラミングPart2 コンストラクタとデストラクタ MQL5), 我々は、より多くの情報をここで見つけました https://qiita.com/aisaki180507/items/2bdc3898391ebcc7acbd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .