0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

オブジェクト指向プログラミングPart3 継承、派生クラスの書き方 MQL5

Last updated at Posted at 2021-08-16

← オブジェクト指向プログラミングPart1

← オブジェクト指向プログラミングPart2 (前回)

##継承、派生クラスとは
 クラスは変数や変数を一つにまとめたものでした。用途に応じてクラスを作成しておくと、関数をバラバラに管理するよりもスッキリするという利点があるわけですが、さらに管理しやすくするために、基底クラス__と__派生クラス__というものを作成できます。例えばEA作成時に使う用のクラスがあるとします。その中でも注文するときに使う関数、ロジックに使う関数、ポジションサイジングに使う関数、などEA作成用のクラスの中でもさらに派生のクラスを作成し、管理することができます。
 派生クラスは基底クラスから変数やメソッドを引き継ぎます
(継承)__。派生クラスのオブジェクト生成をしてしまえば、その基底クラスのメソッドを使うことができます。
image.png

###派生クラスの書き方
image.png
 派生クラスを書くときは通常のクラスの書き方に加えて、基底クラスも記述する必要があります。

 実際にコードを書いてみると↓

.cpp
// 基底クラス
class CRen{
private: 
   int   AI;

public: 
   int get_AI() { return AI; };
   void set_AI(int ai) { AI = ai; };
   
};

// 派生クラス
class CPractice :public CRen{
private:
   int   SA;

public:
   int get_SA() { return SA; };
   void set_SA(int sa) { SA = sa*2; };
};

int OnInit()
  {
   CPractice ren; // オブジェクト生成
   
   // 派生クラスのメソッドを使う
   ren.set_SA( 1234 );
   Print("派生クラスのメソッド ", ren.get_SA() );
   
   // 基底クラスのメソッドを使う
   ren.set_AI( 1234 );
   Print("基底クラスのメソッド ", ren.get_AI() );
   
   
   return(INIT_SUCCEEDED);
  }

このプログラムを実行すると↓
image.png
 OnInit関数内では派生クラスのオブジェクト生成しかしていませんが基底クラスのメソッドを問題なく使用することができました。

 実際にはひとつの基底クラスに対して複数の派生クラスを用意しておき、作りたいプログラムに応じて派生クラスを選択するという使い方が便利だと思います。


続きを読むときはこちら
オブジェクト指向プログラミングPart4 ポリモーフィズム →

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?