C++ では、main メソッドを (Java のように) クラス内に配置しないのはなぜですか? そうすることが理にかなっていないのはなぜですか(私は思います)?
8 に答える
私たちはできる。main
は予約語ではありません。ただし、言語標準では、C++ ツールチェーンはプログラムのエントリ ポイントがmain
グローバル スコープにあることを想定しています。そのためmain
、クラス内はプログラムのエントリ ポイントとして認識されません。
と呼ばれるクラス メソッドを自由に定義し、main
それをグローバルから呼び出してmain
ください。
この設計はすべて C から来ています。既存の C コードとの互換性は、初期の C++ の主な設計目標であり、エントリ ポイントの規則を変更しても実際のメリットはほとんどありませんでした。そのため、彼らは C 標準を維持しました。誰もが言ったように、C++ は Java とは異なり、スタンドアロン (つまり、非クラス) 関数を完全に許可します。
なぜ私たちは?なぜ必要なのですか?
クラス メソッドが意味を持つためには、オブジェクトのインスタンスが必要です。が呼び出されたときmain
、インスタンスはありません。
したがって、代わりに静的メンバー関数にすることもできましたが、ポイントは何でしょうか? それは「よりオブジェクト指向」ですか?どうして?
C++ のやり方は理にかなっていると思います。オブジェクトが存在する前、インスタンスが存在する前に開始しmain
ます。
Java では、main
他に何も存在しないため、静的メンバーです。しかし、C++ には非メンバー関数が存在するのでmain
、それらの 1 つにさせてみませんか?
クラスよりはるかに古い Cmain
では、スタンドアロン関数であり、互換性を維持するために C++ で変更されていないためです。
本当にこれを行いたい場合は、インスタンス化しmain
てメソッドを呼び出すクラスを作成することを妨げるものは何もありませんmain
。
C++ は意図されており、C と下位互換性があると想定されており、main が許可されていない場合、cfront (最初の C++ コンパイラ) は機能しませんでした。
cfront と呼ばれる最初の / オリジナルの C++ コンパイラは、C++ を C に変換してコンパイルし、C 言語では main() を使用する必要があります。
詳細については、次の URL を参照してください。
http://en.wikipedia.org/wiki/Cfront
http://www.physics.drexel.edu/courses/Comp_Phys/General/C_basics/
C++ では、main() はプログラムの実行時に呼び出される関数であり、メソッドではありません。このメイン関数は、実行時にクラスおよびクラスのメソッドを使用する場合があります。
メソッドは、クラス内で定義された関数であり、それらが定義されているクラス/オブジェクトの近くにとどまることを目的としています。したがって、main() は、単一のクラスまたはオブジェクトに対して作用することを意図していないため、クラス内でスタックしません。