2012-02-13 11 views
6

オブジェクトを基底型にキャストしてstd :: mapに格納し、それを元に戻して派生型にリキャストすると、正しい派生クラスメンバのデータですか?派生から基底へのオブジェクトと背面へのキャスト

私は特定の種類のキャストを行う必要がありますか?

+0

sepp2kさんの回答は、データの保存方法をカバーしています。キャストの場合、 'static_cast'と' dynamic_cast'は通常のCスタイルキャストと同様に利用できます。 – Firedragon

+2

ダウンキャスティングはコードの匂いであることが多いことに注意してください。 –

答えて

12

オブジェクトへのポインタをキャストしている場合でも、ポインタは同じオブジェクトを指しているので問題ありません。

実際のオブジェクトをキャストしている場合、サブクラスのすべての情報はスーパークラスに変換されると失われます。したがって、キャストするとその情報は復元されません。

+0

実際のオブジェクトをキャストしていますか?どうやって? 'static_cast'を使用しますか? – Alcott

+0

@Alcottはい、またはCスタイルのキャスト、または単純にコピーコンストラクタまたは代入演算子、つまり 'SuperClass obj(SubClass());または' obj = SubClass(); 'を使用します(ただし、技術的にはキャスト)。 – sepp2k

関連する問題