トップ  >  リファレンス  >  基本  >  データ型  > 参照:&修飾子とthis
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ

天才数学者のエドワード・オークリー・ソープの物語とジョン・ケリーの公式は必見です。
参照:&修飾子とthis



引数の参照渡し


MQL4ではシンプルな型の引数は、値渡しと参照渡しのいずれかの方法で渡す事が出来ます。
複雑な型の引数は常に参照渡しになります。
引数を参照渡しにするには、引数名の前に&修飾子を追加してコンパイラに知らせる必要があります。

引数の参照渡しは、変数のアドレスを渡す事を意味します。
参照によって渡された引数の値が変更された場合、参照元の変数に変更内容が反映されます。
参照によって渡された引数の変更を防止するには、const修飾子を使用します。

関数の引数が配列・構造体・クラスオブジェクトの場合、
関数ヘッダの変数の型の後に&修飾子を付けます。
サンプルソース:
class CDemoClass {
private:
   double            m_array[];
 
public:
   void              setArray( double &array[]);
};


void  CDemoClass::setArray(double &array[]) {
   if ( ArraySize(array) > 0 ) {
       ArrayResize( m_array , ArraySize(array) );
       ArrayCopy( m_array , array);
   }
}


上記サンプルソースで、CDemoClassクラスが宣言され、このクラスにはdouble型のm_array[]配列のprivateメンバが含まれています。
setArray()関数が宣言され、引数のarray[]配列は参照によって渡されます。

関数ヘッダで参照渡しについての指示(&修飾子)が無い場合、
コンパイラはコンパイル時エラーメッセージを生成します。


this


クラス型(オブジェクト)の変数は、参照渡しとポインタ渡しのいずれかの方法で渡す事が出来ます。
ポインタは参照渡しと同様に、オブジェクトへのアクセスが出来ます。

this(予約語)は、自身のオブジェクトへの参照を行う為にあります。
これはクラス内や構造体メソッド内で使用可能です。

thisは常にオブジェクト参照します。

MQL4関数はオブジェクトを返す事は出来ませんが、オブジェクトポインタを返す事は出来ます。

GetPointer(this)でオブジェクトポインタを返す事が出来ます。


サンプルソース:

class CDemoClass {
private:
   // none 
public:
   CDemoClass       *getDemoClass();
};

//+------------------------------------------------------------------+
//| 自身のポインタ取得                                          |
//+------------------------------------------------------------------+
CDemoClass *CDemoClass::getDemoClass(void) {
   return( GetPointer( this ) );
}



void OnStart(){

    CDemoClass* p_obj;
    CDemoClass* p_this;
    
    p_obj =  new CDemoClass();
    p_this = p_obj.getDemoClass();
    
    printf("p_objアドレス:%d , p_thisアドレス:%d",p_obj,p_this);

    delete(p_obj);
}


結果:
test_script EURUSD,M5: p_objアドレス:1 , p_thisアドレス:1


構造体はポインタを持っていません。
その為、構造体に対してnew演算子・delete演算子・GetPointer(this)を使用する事は出来ません。
スポンサーリンク



Copyright ©2015 MT4でEA自作しちゃお〜 All Rights Reserved.


Top

inserted by FC2 system