Artyom Trishkin: Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.
//+------------------------------------------------------------------+//| CNewBar Time Возвращает время нулевого бара |
//+------------------------------------------------------------------+datetime CNewBar::Time(void)
{
datetime array[1], ret;
ret = CopyTime(this.m_symbol, this.m_timeframe, 0, 1, array) == 1 ? array[0] : 0;
return(array[0]);
}
//+------------------------------------------------------------------+//| CNewBar IsNewBar Основная функция класса |//+------------------------------------------------------------------+bool CNewBar::IsNewBar(void)
{
datetime tm = this.Time();
if(tm == 0)
returnfalse;
if(tm != this.m_time)
{
this.m_time = tm;
returntrue;
}
returnfalse;
}
私が渡したコードの何かを書き直したのは、アレクセイだったのです。あるいは、甘く見ていたのかもしれません。もう覚えていないことを明確にするために、簡単な例として「土下座」して書きました。
アレクセイなら教えてくれるかも)
その繰り返しは終わることなく、新たなサイクルが始まるわけでもなく、次のIfへと進んでいくのです。論理が変わる。
Artyom Trishkin:
Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.
Artemさん、なぜここでthisキーワードを 使うのですか? これがないと、メソッドがクラスのメンバーで 動作してしまうのですが...。
Alexeyさん、こんなに詳しく答えてくれてありがとうございます。
コード内のret変数の用途がよくわからないのですが...。
メソッドがarray[0]を返す場合、なぜ計算されるのですか?
P.S.
なぜクラスメソッドで これを使うのか?私たちは、この特別なクラスのメンバーと一緒に...
1.ここでCopyTime関数は 何のためにあるのか?
2.これは個人的な好みなのか、それとも必要なことなのか。
1.CopyTime関数は 何のためにあるのですか?
2.これは個人の好みなのか、それとも必要なのか?
CopyTime()が気に入らない場合は、iTime()に置き換えてください。違いはなく、現在のバーの時間を取得することが主な内容です。
頭の中では、いつ頃書かれたものなのか、ぼんやりと覚えています。私もこの質問をしたような気がします...そして、私が間違っていなければ、これは他のクラスに同様のものがある場合に、参照がローカルメソッドのみであることを保証するものです。もちろん、アルチョムも明らかにします。
いや、あそこの条件はもともと、ポインタの作成に成功したらリストに追加する、みたいな設定になっている。カーブブラケットは閉じており、失敗した場合は加算が実行されない。continue演算子 ではロジックが少し違いますが、結果は同じです。
そう、結果は同じで、中身が違うのです。色とロジックですが、コンティニューした方が早いと思います.
Artemさん、なぜここでthisというキーワード が使われているのですか? なぜなら、thisがなくても、メソッドはクラスのメンバーで 動作するからです...。
そうでしょう。そうしてほしいから使っているのです :)どのクラスのメソッドが使われるかを明示的に示しています。
親クラスと子クラスがあり、同じ名前のメソッドが2つあるが、何らかの理由で仮想化されていない場合、どちらを使うか明示的に指定しなければならない。
親クラスをCParent、継承クラスをCInheritedとし、両クラスともMethod()メソ ッドを持つとします。
この場合、CParent クラスのメソッド Method() を呼び出すと、明示的に CParentクラスのメソッドを 呼び出すことになります - ここではその必要はありません。これがあってもなくても、メソッドを呼び出すことができます。
CInheritedなクラスでMethod()メソッドを呼び出すと、最初に呼び出したクラスに属するメソッドを探すので、そのクラスのメソッドも呼び出さ れます。
CInherited クラスで CParent::Method() を呼び出すと、このように呼び出されるのは親クラスの メソッドです。 コンテキスト解決演算子によって親クラスに属するメソッドを明示的に指定 したためです。
しかし、それでも、私はメソッドを呼び出すと CInherited クラスの Method() をthis で継承 する- この (this == "this") 継承クラスが呼び出さ れることを確認するためです。
これを使っての説明は他にもあります。OOPに詳しい人なら教えてくれるかもしれません。
そう、結果は同じで、中身が違うのです。色とロジックですが、コンティニューした方が早いと思います.
何の違いもないはずです。括弧やインデントが少ないので、見た目がきれいなんです。
私もその一 人で、特にクラスから標準関数を呼び出すときは、必ずグローバルコンテキストを指定します。ただ、このクラスに標準関数と同じ名前のメソッドを書こうと思えるからです--そうすれば、それが何をするのか忘れることはないでしょう。そこで、標準の関数を呼び出すには :: が便利で、同じ名前の私のメソッドを呼び出すにはこれが便利なのです。