14

C++ では、main メソッドを (Java のように) クラス内に配置しないのはなぜですか? そうすることが理にかなっていないのはなぜですか(私は思います)?

4

8 に答える 8

27

私たちはできる。mainは予約語ではありません。ただし、言語標準では、C++ ツールチェーンはプログラムのエントリ ポイントがmainグローバル スコープにあることを想定しています。そのためmain、クラス内はプログラムのエントリ ポイントとして認識されません。

と呼ばれるクラス メソッドを自由に定義し、mainそれをグローバルから呼び出してmainください。

この設計はすべて C から来ています。既存の C コードとの互換性は、初期の C++ の主な設計目標であり、エントリ ポイントの規則を変更しても実際のメリットはほとんどありませんでした。そのため、彼らは C 標準を維持しました。誰もが言ったように、C++ は Java とは異なり、スタンドアロン (つまり、非クラス) 関数を完全に許可します。

于 2012-07-10T19:31:03.077 に答える
23

なぜ私たちは?なぜ必要なのですか?

クラス メソッドが意味を持つためには、オブジェクトのインスタンスが必要です。が呼び出されたときmain、インスタンスはありません。

したがって、代わりに静的メンバー関数にすることもできましたが、ポイントは何でしょうか? それは「よりオブジェクト指向」ですか?どうして?

C++ のやり方は理にかなっていると思います。オブジェクトが存在する前、インスタンスが存在する前に開始しmainます。

Java では、main他に何も存在しないため、静的メンバーです。しかし、C++ には非メンバー関数が存在するのでmain、それらの 1 つにさせてみませんか?

于 2012-07-10T19:44:07.500 に答える
10

クラスよりはるかに古い Cmainでは、スタンドアロン関数であり、互換性を維持するために C++ で変更されていないためです。

本当にこれを行いたい場合は、インスタンス化しmainてメソッドを呼び出すクラスを作成することを妨げるものは何もありませんmain

于 2012-07-10T19:30:31.313 に答える
3

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/

于 2012-07-10T21:38:00.617 に答える
2

C++ では、main() はプログラムの実行時に呼び出される関数であり、メソッドではありません。このメイン関数は、実行時にクラスおよびクラスのメソッドを使用する場合があります。

メソッドは、クラス内で定義された関数であり、それらが定義されているクラス/オブジェクトの近くにとどまることを目的としています。したがって、main() は、単一のクラスまたはオブジェクトに対して作用することを意図していないため、クラス内でスタックしません。

于 2012-07-10T19:43:17.807 に答える