変数

変数の宣言

変数は、使用する前に宣言する必要があります。変数を識別するためには、一意の名称が使用されます。変数を宣言するには、型と一意の名称の指定が必要です。変数の宣言は演算ではありません。

基本データ型は下記の通りです。

  • char、short、int、long、uchar、ushort、uint、ulong の 整数
  • color – RGB 色を表す整数
  • datetime – 日時(1970年1月1日0時からの秒数を含む符号なしの整数)
  • bool – ブール値(truefalse
  • double – 倍精度浮動小数点数
  • float – 単精度浮動小数点数
  • string – 文字列

例:

string szInfoBox;
int    nOrders;
double dSymbolPrice;
bool   bLog;
datetime tBegin_Data   = D'2004.01.01 00:00';
color    cModify_Color = C'0x44,0xB9,0xE6';

複雑または複合型は次の通りです。

構造体は、他の型を使用して構築された複合データ型です。

struct MyTime
 {
  int hour;   // 0-23
  int minute; // 0-59
  int second; // 0-59
 };
...
MyTime strTime; // 以前に宣言された MyTime 構造体の変数

構造体を宣言するまで、その構造体型の変数を宣言することは出来ません。

配列

配列は同じ型のデータをインデックス付きで収めます。

int    a[50];       // 50 の整数の 1 次元配列
double m[7][50];   // 7 列の 2 次元配列
                  // 各列が 50 の数を含む
MyTime t[100];     // MyTime のような要素を含む配列

配列のインデックスとなれるのは整数のみです。4 次元以下の配列のみが使用可能です。配列要素の番号付けは 0 から始まります。1 次元配列の最後の要素は、配列のサイズより 1 小さいインデックスを有します。例えば 50 の整数からなる配列の最後の要素の呼び出しは a[49] となります。多次元配列の次元も同じように 0 から次元サイズ−1までのインデックスを持ちます。例の 2 次元配列の最後の要素は m[6][49] となります。

静的配列は時系列としては表すことが出来ません。末尾から先頭に向かっての配列要素アクセスを設定する ArraySetAsSeries() 関数は静的配列に適応出来ません。時系列と同じアクセスを提供する場合には動的配列オブジェクトが使用されるべきです。

配列の範囲以外のアドレス指定がされた場合、実行するサブシステムは重大エラーを発生し、プログラムが停止されます。

配列操作の組み込みメソッド #

配列関数セクションの関数と組み込みメソッドを使用して配列を処理できます。

メソッド

同等

説明

void array.Fill(const scalar value, const int start_pos=0, const int count=-1);

ArrayFillArrayInitialize

配列を指定された値に設定します。

void array.Free();

ArrayFree

動的配列バッファを解放し、ゼロ次元サイズをゼロに設定します

int array.Resize(const int range0_size, const int reserve);

int array.Resize(const int range_sizes[], const int reserve);

ArrayResize

最初の次元のサイズを新しく設定します

int array.Print();

ArrayPrint

操作ログに単純型配列の値を表示します

int array.Size(const int range=-1);

ArraySize, ArrayRange

配列全体(範囲=-1)または指定された配列次元の要素数を返します

bool array.IsDynamic();

ArrayIsDynamic

配列が動的であるかどうかをチェックします

bool array.IsIndicatorBuffer();

 

配列が指標バッファであるかどうかをチェックします

bool array.IsSeries();

ArrayIsSeries

配列が時系列であるかどうかをチェックします

bool array.AsSeries();

ArrayGetAsSeries

配列の索引付けの方向をチェックします

bool array.AsSeries(const bool as_series);

ArraySetAsSeries

配列の索引付けの方向を設定します

int array.Copy(const src_array[], const int dst_start, const int src_start, const int cnt);

ArrayCopy

配列要素を別の配列に複製します

int array.Compare(const src_array[], const int dst_start, const int src_start, const int cnt);

ArrayCompare

2 つの単純型配列またはカスタム構造体を比較した結果を返します

int array.Insert(const src_array[], const int dst_start, const int src_start, const int cnt);

ArrayInsert

指定されたインデックスから開始して、指定された数の要素をソース配列からターゲット配列に挿入します

int array.Remove(const int start_pos, const int count);

ArrayRemove

指定されたインデックスから始めて指定された数の要素を配列から削除します

int array.Reverse(const int start_pos, const int count);

ArrayReverse

指定されたインデックスから始めて指定された数の要素の順番を反転します

bool array.Swap(array& arr[]);

ArraySwap

同じ型の別の動的配列とコンテンツを交換します

void array.Sort(sort_function);

ArraySort

数値配列を初次元によってソートします。

int array.Search(scalar value, search_function);

ArrayBsearch

初次元で最初に見つかった要素のインデックスを返します。

int array.Find((scalar value, search_function);

 

渡された関数を使用して配列内で検索を実行し、最初に検出された要素のインデックスを返します

array array.Select(scalar value, search_function);

 

渡された関数を使用して配列内で検索を実行し、検出されたすべての要素を含む配列を返します

 

アクセス指定子

アクセス指定は、コンパイラが変数や構造体やクラスのメンバにアクセスする方法を定義します。

const 指定子は、変数を定数として宣言し、実行時の変更を不可能にします。宣言時には、変数の単一の初期化が許可されます。

例:

int OnCalculate (const int rates_total,     // price[] 配列のサイズ
                const int prev_calculated, // 以前の呼び出しで処理されたバー
                const int begin,           // 重要データの開始点
                const double& price[]       // 計算対象の配列
  );

構造体やクラスのメンバにアクセスするには次の修飾子を使用します。

  • public – 変数やクラスメソッドへの無制限のアクセスを許可します。
  • protected – このクラスのメソッド、またpublic で継承されたクラスからのアクセスを許可します。その他のアクセスは不可能です。
  • private – 同じクラスのメソッドからのみの変数やクラスメソッドへのアクセスを許可します。
  • virtual – クラスメソッドのみ(構造体のメソッドは含まない)に適用され、クラスを仮想関数のテーブルに配置する必要があるとコンパイラに指示します。

ストレージクラス

ストレージクラスは 3 つあります。staticinput 及び externです。これらのストレージクラス修飾子は、対応する変数がグローバルプールと呼ばれるメモリの事前割り当て領域に分布していることをコンパイラに明示的に指示します。また、これらの修飾子は、可変データの特殊な処理を示します。ローカルレベルで宣言した変数が static でない場合、そのような変数のためのメモリはプログラムスタックに自動的に割り当てられます。配列が宣言されたブロックの視認性の領域を越えると、非静的配列に割り当てられたメモリの解放が自動的に行われます。

参照

データ型型のカプセル化と拡張性変数の初期化変数のアクセス権スコープとライフタイムオブジェクトの作成と解徐クラスの静的メンバ