Виртуальная функция, как и обычная функция, должна иметь исполняемое тело. При вызове семантика ее точно такая же, как и у остальных функций.
例
class Base {
private:
int a;
public:
virtualint Func1();
};
class Second: public Base {
public:
int Func2() {
return0;
};
};
intOnInit() {
Base* base = new Base();
Second* foo = new Second();
return(INIT_SUCCEEDED);
}
もう、いいじゃないですか。NULL定数を使用する。
秘密を教えてあげよう、もう実装されているんだ。マウスのホイールをクリックすると、十字のマークが表示されます。
ずっと前からできるんですね。ナビゲーターから、すでにインジケーターが装着されているウィンドウにインジケーターをドラッグします。
IMHOは、それが最も必要なことではないのです。
ナビゲーター、お気に入り、テンプレート、プロファイルがあります。すべてがセットアップ可能です。端末のヘルプを読めば、多くの発見がありますよ。
列挙は、コードを読みやすくするために、定数を削除し、人間が知っている実体に置き換えるために使用されます。
例えば、列挙型ENUM_DAY_OF_WEEKの値は、構造体MqlDateTimeの値day_of_weekと比較するために使用することができます。すなわち、次のように書くことができます。
あるいは、違う書き方を することもできます。
SUNDAYはint型の名前付き定数で、値は0です。
カッコイイ!ナビゲーターありがとうございましたあまり気にしていなかった。普段はオフにしているので、あまり場所を取らない。チラッとでもいいからヘルプを、読ませていただきました。チャートのウィンドウ内で、間接をドラッグして重ねても何も教えてくれません。とはいえ、当てずっぽうでやっても良かったのですが......)))
列挙の本質を説明していただき、ありがとうございます早速読んでみると、MQLはC++から派生したものがほとんどで、そのドックもたくさんあります。しかし、Helpに誤植が多く、記事が不完全なのは良くない。
結果:正しく書かれたヘルプは、フォーラムでの馬鹿な質問を避けるのに役立つかもしれません。
NULLに関しては、ゼロですねー、よく使われるのは。しかし、変数の最大値というのは非常に稀で、ほとんどない。例えば、ある変数には、指標を分析した結果、BUY、SELL、NULLの3つの状態が格納される。POSITION_TYPE_BUY、POSITION_TYPE_SELLという 定数を使うと、どちらかが0になる。EMPTY_VALUEは全ての型に一般化すれば、NULLよりも普及すると思います)。
もうひとつ、限りなく便利なアプリケーションがあります。例えば、こんな感じです。
そして、ユーザーは、あなたがそこに書いたコメントの中から、「買うだけ」「売るだけ」など、4つの項目を選択できるドロップダウンリストを取得します。ユーザー設定ウィンドウで、一連の指標、タイムフレーム、条件などをリストアップするのに非常に便利です。
NULLの部分は0であり、よく使われる。例えば、指標を分析した結果、BUY、SELL、NULLの3つの状態が変数に格納されます。POSITION_TYPE_BUY、POSITION_TYPE_SELLの レディ定数を使用すると、どちらかがNULLになります。
問題ありません、そのようにすればいいのです。
そして、好きなところに置く。
問題ありません、そのようにすればいいのです。
そして、好きなところに置いてください。
すべてクリアしています。そういうことではありません。
では、どういう意味か説明してください。すべての定義済みデータ型に 対応する単一の定数?そのようなことが実施される可能性は低い。
残念ながら、このような警告の有用性と重要性を理解しているのは、経験豊富なプログラマーだけである。
まあ、皆さんもこの程度のコンパイラの助けは喜んで、自分でエラーを修正することをお勧めします。これらは実際に起こりうるエラーの場所であり、初心者の開発者にとってはまさに学ぶことが決定的に重要なのです。
純粋にバーチャルな手法」というテーマは、数年前にすでにフォーラムで提起されていました。
つまり、C++の概念では、子孫に必ずオーバーライドされなければならないボディを持たない仮想メソッド。
また、そのようなメソッドを含むクラスは自動的に抽象化される。コンパイラはこれも追跡する。(まあ、あくまで標準に忠実にということで、コンストラクタをprotectedスコープに隠してもいいんですけどね)。
現在、「純粋な仮想メソッド」の動作が不足しているのです。そのような機能がなければ、ライブラリやフレームワークを適切に用意して外注することはできません。自分自身の子クラスを作り(それはただ無用の長物ではなく、他のクラスの歯車のように組み込まれます)、親切にもインターフェイス全体を実装してくれるのです。今、継承して、メソッドの実装を入れないと、コンパイラはそれを飲み込んで、何も動かなくなります。親クラスのソースコードを掘り下げる?
インターフェイスの概念は、OOPの基礎の一つです。ですから、ぜひともMQL6ではなく、5で実装していただきたいものです
ちなみに、仮想関数に関するドキュメントでは、以下のようなエラーがあります。
例
Func1 仮想関数は実行可能なボディを持たないが(値を返すこともない)、エラーなくコンパイルできる。
純粋にバーチャルな手法」というテーマは、数年前にすでにフォーラムで提起されていました。
つまり、C++の概念では、ボディを持たない仮想メソッドは、子孫にオーバーライドされなければならない(MUST)。
また、そのようなメソッドを含むクラスは自動的に抽象化される。コンパイラはこれも追跡する。(まあ、標準に忠実なだけで、コンストラクタをprotectedスコープに隠してもいいんですけどね)。
現在、「純粋な仮想メソッド」の動作が不足しているのです。このような機能がなければ、ライブラリやフレームワークにアウトソースするための準備を適切に行うことができません。子クラスを作り(これは何もしないのではなく、他のクラスの歯車のように組み込まれます)、親切にもインターフェイス全体を実装してくださいます。今、継承して、メソッドの実装を入れないと、コンパイラはそれを飲み込んで、何も動かなくなります。親クラスのソースコードを掘り下げる?
インターフェイスの概念は、OOPの基礎の一つです。ですから、ぜひともMQL6ではなく、5で実装していただきたいものです
ちなみに、仮想関数に関するドキュメントでは、以下のようなエラーがあります。
例
Func1 仮想関数は実行可能なボディを持たないが(値を返すこともない)、エラーなくコンパイルできる。
1.純粋な仮想関数は近日中に追加予定
2.Func1の呼び出しは、この例のどこにあるのですか?ノーコール-ボディコントロールができない。
1.純粋な仮想関数は近日中に追加予定
2.例のFunc1コールはどこにあるのでしょうか?コールなし - ボディコントロールもなし。
VS 2015は以下のように言っています。
Severity Code Description Project File Line Suppression State.
Error LNK2001 unresolved externalsymbol"public: virtual int __thiscall Base::Func1(void)" (?Func1@Base@UAEHXZ) TestCPPCode C:\MyPAvForex Filterunk</TestCPPCode.obj 1.
Error LNK1120 1 unresolved externals TestCPPCode C:\MyPAvForex╱MQL4FilesForFormatting2015╱Debug╱TestCPPCode.exe 1
VS 2015は以下のように言っています。
Severity Code Description Project File Line Suppression State.
Error LNK2001 unresolved external symbol "public: virtual int __thiscall Base::Func1(void)" (?Func1@Base@UAEHXZ) TestCPPCode C:\MyPAvForex Filterunk</TestCPPCode.obj 1.
Error LNK1120 1 unresolved externals TestCPPCode C:\MyPAvForex╱MQL4FilesForFormatting2015╱Debug╱TestCPPCode.exe 1