3

サブオブジェクト含まれるオブジェクトの違いは何ですか? 別のクラスから派生したクラスのインスタンスを構築するには、まずサブオブジェクトを作成し、次に派生オブジェクトを作成する必要があります。

質問:

  1. 派生オブジェクトにサブオブジェクトが含まれているというのは本当ですか?

  2. オブジェクトの構造の違いをどのように視覚化できますか

    a) 別のオブジェクトを含む

    b) 別のクラスから派生したもの

    a) と b) のオブジェクトは同じ構造を持っていますか?

4

3 に答える 3

2

C++ では、違いは仮想メソッドにあります。派生クラスは、基本サブオブジェクトの仮想メソッドを再定義できます。収容物はそのままです。これは多かれ少なかれキリルが答えたものですが、もう少し簡単な答えを願っています.

于 2012-07-11T08:43:08.977 に答える
1

はい、派生オブジェクトにはサブオブジェクトが含まれています。そう言うのは間違いではないでしょう。派生はもう少しですが。データメンバーとメソッドに直接アクセスできます。仮想関数はVMTのスロットを使用します。オブジェクトが含まれている場合、これはすべて発生しません。

違いを視覚化する。これを行うための一般的に受け入れられている方法はありません。メモリレイアウトの観点から、違いはVMTにあります。含まれるオブジェクトには、独自のVMTフィールドがあります(ある場合)。派生オブジェクトには独自のVMTがあり、新しいエントリを追加して一部を置き換えることにより、ベースオブジェクトのVMTから作成されます。

于 2012-07-11T07:31:52.517 に答える