2

Javaには、、などObjectのメソッドがいくつかあります。C++ のオブジェクトには組み込みメソッドがありますか? C++ と Java のオブジェクトの実際の違いは何ですか?toStringhashCodeequals

4

4 に答える 4

8

Java と C++ では動作が異なります。

  • Java では、すべてのオブジェクトがクラスから継承されますObjectToString()これは、サブクラスによってオーバーライドできるようないくつかの基本的なメンバー関数を提供する基本クラスです。

  • C++ には のようなクラスはありませんObject。実際、C++ のオブジェクトという言葉は、非クラス型を含む任意の型を指します。新しい C++11 標準は、有効なオーバーロードが存在することを前提として、任意のオブジェクトに対して有効な
    標準関数を提供します。: http://en.cppreference.com/w/cpp/string/basic_string/to_string : http://en.cppreference.com/w/cpp/utility/hash また、任意のタイプ間の等価性は次の方法で定義できます。std::to_string
    std::to_string
    std::hash
    operator==

これは、2 つの言語間でデザインの選択が異なることを示しています。Java はよりオブジェクト指向 (基底クラスが機能を提供) ですが、C++ 標準ライブラリは汎用プログラミング パラダイム (さまざまな型に適用できるアルゴリズム) を使用します。

于 2012-09-23T10:39:09.110 に答える
2

C++ では、使用した分だけ料金が発生します。したがって、既定の C++ オブジェクトにはスーパークラスがなく、既定のコンストラクター、コピー コンストラクター、代入演算子、およびデストラクター以外に事前定義されたメソッドはありません。

同様に、メンバー メソッドはデフォルトではポリモーフィックではありません。

class A { void foo(){ cout << "Hello from A\n"; } };
class B : public A { void foo(){ cout << "Hello from B\n";}};

...
unique_ptr<A> a= new B();
a->foo(); // will print Hello from A since a is an A*

キーワードを使用してメソッドをポリモーフィックに宣言する必要がありますvirtual

class A { virtual void bar(){ cout << "Hello from A\n"; } };
class B { virtual void bar(){ cout << "BBBB\n";}};

unique_ptr<A> a=new B();
a->bar(); // will print "BBBB": indirection through virtual function table.

クラスもデストラクタを取得します。オブジェクトの存続期間は、ユーザー/ガベージ コレクションによって制限されるのではなく、可視性によって制限されます。どのコードからも見えなくなった変数は、すぐにクリーンアップされます。

オブジェクトは、 を使用してフリー ストアに作成することもできます。newこの場合、オブジェクトを で明示的に解放する必要がありますdelete

于 2012-09-23T10:37:50.037 に答える
1

Andrew Koenig 著Accelerated C++の本によると、 C++ の「オブジェクト」という言葉は、「メモリ内に存在するもの」と定義できます。これは、ポインター、関数ポインター、インスタンス オブジェクト、配列などと同様に、基本/プリミティブ型の変数にも同様に適用されます。また、そのメモリがスタックに自動的に割り当てられるか、ヒープに動的/手動で割り当てられるかに関係なく当てはまります。

Objectこれは、すべてのクラスの究極のベースを指すJava の同じ単語の定義とは大きく異なり、 「オブジェクト」という単語は「クラスのインスタンス」を意味するものとして定義されています。したがって、常にheapに割り当てられたものを参照します。

他の回答が指摘したように、C++ には組み込みの型や究極の基底クラスがありませんObject

于 2012-09-23T10:52:27.540 に答える
0

メソッドtoString()hashCode()などは Java オブジェクトの標準メソッドではありません。これらはクラスObject(Java Env の最上位クラス) のパブリック メソッドです。すべてのクラスがデフォルトで extendsObjectであるため、すべてのオブジェクトにこれらのメソッドがあります。

しかし C++ では、Java のような最上位のクラスがObjectないため、このような標準メソッドはありません。

于 2012-09-23T10:28:29.913 に答える