1

Javaにはデフォルトのコンストラクタがありますが、C++と同じようには機能していません。

C ++では、オブジェクトが宣言されるときにデフォルトのコンストラクターが暗黙的に呼び出されるため、明示的に「新規」にする必要はありません。ただし、Javaでは、オブジェクトを明示的に初期化する必要があります。それには特別な理由がありますか?これに対する機能のリクエストはありましたか?

4

3 に答える 3

8

C++宣言がスタック上にオブジェクトを作成している場合のみ。すべてのJavaオブジェクトはヒープベースであるため、これはオプションではありません。どちらの言語でも、新しいオブジェクトが作成されるときにコンストラクターが呼び出されます。

// C++
Obj obj;  // stack
Obj* pObj = new Obj;  // heap

// Java
Obj obj = new Obj();  // heap (stack not possible)
于 2012-09-30T19:55:52.450 に答える
2

技術的には、

C ++では、オブジェクトが宣言されると、デフォルトのコンストラクターが暗黙的に呼び出されます。

正しくありませんが、不完全です。オブジェクトにユーザー定義のデフォルトコンストラクターがある場合、それを宣言することだけはできません。宣言のポイントは、定義と初期化でもあります。

Javaでは、参照は可能ですがnull、C++ではできません。NULLC++に含めることができるのはポインタのみです。したがって、さまざまなセマンティクスがあります。

JavaObject o = null; //valid Java
                     //invalid C++
于 2012-09-30T19:57:51.433 に答える
0

Javaコンストラクト:

MyClass myObject;

次のC++と同等(-ish)です。

MyClass *myObject;

しないでください:

MyClass myObject;

後者に相当するJavaはありません。

于 2012-09-30T19:58:21.980 に答える