基礎から学ぶシステムトレード
シストレブログ人気ランキング  

シストレ徹底攻略シストレマスターへの道ワールド・トレーディング・エッジ基礎から学ぶシステムトレードシストレニュースシストレツールシストレナビTOPへ

 

2011年03月07日(月)

[MQL5]関数のオーバーロード [MQL5]



今回はまたプログラミングの話で、MQL4とMQL5の違いについてです。

まずは、次のプログラムを見てください。

int func(int x, int y)
{
return(x + y);
}

string func(string x, string y)
{
return(x + y);
}

void start()
{
Print(func(12, 34));
Print(func("12", "34"));
}
どこかおかしいと思われませんか?確かにMQL4プログラムの場合、これはコンパイルでエラーが出ます。

エラーの理由は、「func」という名前の関数を2回定義しているからです。

そもそもこのプログラムは何をしたいかというと、二つの整数データをパラメータとしたときには、整数を足し算した結果を、二つの文字列をパラメータとしたときは、二つの文字列を連結した結果を表示させたいのです。

つまり、この例では、
46
1234
という結果になって欲しいわけです。

データの型が違うと処理の方法が違うので別の関数にしないといけないのですが、MQL4の場合、同じ関数名は使えないので、次のように関数名を変えないといけないことになります。
int func1(int x, int y)
{
return(x + y);
}

string func2(string x, string y)
{
return(x + y);
}

void start()
{
Print(func1(12, 34));
Print(func2("12", "34"));
}

ところが、MQL5では次のようなプログラムがOKになります。
int func(int x, int y)
{
return(x + y);
}

string func(string x, string y)
{
return(x + y);
}

void OnStart()
{
Print(func(12, 34));
Print(func("12", "34"));
}

これは、最初のプログラムでstart()をOnStart()に変えただけです。

MQL4プログラム、あるいはCプログラムしか経験のない人にとっては不思議に思えるかもしれません。しかし、これはC++の「関数のオーバーロード」という機能と同じものです。

同じ関数名でもパラメータの型が異なれば、別の関数と見なされるのです。つまり、関数を呼び出すときにパラメータの型がわかるので、パラメータの型がint の場合、上のfunc()が呼び出され、パラメータの型がstring の場合、下のfunc()が呼び出されるのです。

MQL5はC++をベースに開発されたので、C++と同様の機能が使えるようになったということです。

実際、同じ関数名をいくつも定義すると混乱することもあるので、あまり多用することはないでしょうが、MQL5の組込み関数の一部には、このようにパラメータの型の違うケースがあります。

続きは次回に。


>>“基礎から学ぶシステムトレード”全記事バックナンバーはこちらから




Posted at 15時08分


ページのトップへ ページのトップへ

Sponsor AD

2011/3

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

プロフィール

豊嶋久道

2003年よりFX取引を始め、システムトレードの道へ。最近ではFXオプション取引も含めたトレーディングシステムの研究を行っている。システムトレードを基礎から正しく理解するための情報を発信する予定。

PHOTO

相場はランダムウォーク?

相場はランダムウォーク?

カテゴリーリスト

最近の記事

検索


当サイトコメントについて

当コメントは情報提供のみを目的として作成されたものであり、投資に関してはご自身でご判断くださいますようお願い致します。また、当資料は著作物であり著作権法により保護されております。無断で全文または一部を転載することはできません。

RSS1.0

[Login]


powered by a-blog
Copyright (C) 2008 PhiConcept,Inc. All rights reserved.