0

B が C++ で D1 の派生元のクラスであるようなステートメントネットを記述するとどうなるか実際に新しいオブジェクトが作成されるか、プリミティブ型のような単純な型キャストが行われるか

    D1 d1;
    (B)d1;
4

2 に答える 2

1

型キャストは新しいオブジェクトを作成しませんが、両方の型を認識しているコンパイラは、オブジェクトを型キャストされたものとして解釈するために必要なオフセットを適用できます。もちろん、コンパイラまたはランタイムは、キャストが合法であることを確認します。

特定のケースでは、派生オブジェクトを基本クラスにキャストする場合、それは「スライス」と呼ばれ、派生部分は基本オブジェクトから切り取られます。これを直感的に理解するために、d1 にはすべての this members を保持するメモリ領域があるとします。これは B から派生しているため、基底クラスのバージョンを保持するサブ領域を持つことになります。d1 を基本クラスにキャストするときは、変数がサブ領域のみを参照し、残りの部分を無視するようにする必要があります。つまり、オブジェクトの境界は基本クラスの部分で停止します。

于 2013-10-19T18:08:44.770 に答える