0

派生クラスの基本オブジェクトの割り当てについて混乱しています。タイプがあるとします:

class Base {
 // stuff omitted for brevity
}

および派生クラス

Derived : public Base {
  // stuff omitted
}

そして、私はこのように発生する状況を持っています:

Derived = Base;

これは可能ですか?この操作は何と呼ばれますか? どうすればそんなことをするでしょうか?

ご協力いただきありがとうございます。

4

3 に答える 3

0

これは呼ばれobject slicing、通常は悪いことです。派生クラスは、より多くのものを持つ基本クラスです。Derived オブジェクトを Base オブジェクトに割り当てると、余分なものはどうなるでしょうか? この操作は論理的に意味がありません。

于 2013-08-16T01:45:31.977 に答える
0

基本クラス オブジェクトを派生クラス オブジェクトに割り当てることはほとんどありません。これは、派生オブジェクトが部分的にしか割り当てられず、一貫性がない可能性があるためです。ただし、基本クラス オブジェクトのポインターを派生クラス オブジェクトのポインターにキャストする必要がある場合があります。

Base *pb = new Derived;
..
Derived *pd = dynamic_cast<Derived*>(pb);

これは、ベース ポインターが指すオブジェクトの正確なタイプを識別したい場合に使用されます (ただし、この例のように、実際には被駆動オブジェクトを指しています)。通常、これは時間がかかり、適切な設計ではないため、避ける必要があります。

于 2013-08-16T01:29:29.533 に答える