0

2つのクラス階層があります。

BaseUnit <- S1Unit , BaseUnit <- S2Unit, ..S3Unit, S4Unit

Base <- S1 , Base <- S2

Baseユニットの値を保存しました。

class Base {
  protected: BaseUnit unit; // actually this is an upcast of S1Unit, S2Unit
  // of course I do several things with unit on methods of Base 
}

これはS1Unit、S2Unitに基づいています。

S1::S1(S1Unit s1unit) : unit(s1unit) { .. }

しかし、S1で専用ユニットを返却したい場合、どうすればよいでしょうか。

S1Unit S1::getUnit() const { return this->unit; /* how to cast down? */ }

S1Unit正常に動作するコンストラクターを実装することはできますBaseUnit S1Unit::S1Unit(BaseUnit)が、この種のダウンキャストコピーコンストラクターはどういうわけかあまり良くありません。私がチェックしたすべての回答は、ポインターを使用した例を示しています。

より良い解決策は何でしょうか?代替案はありますか?

4

1 に答える 1

1

クラス間で異なる機能は、仮想関数を介して公開する必要があります。

そうすれば、オブジェクトをキャストダウンする必要はなく、を返すだけで済みますunit。呼び出されるメンバー関数は、作成したオブジェクトに対して正しいものになります。

于 2013-03-25T18:04:25.567 に答える