dynamic_cast
の基底クラスオブジェクトを派生クラスオブジェクトにキャストしようとしましたが、dynamic_cast
がnullを返します。 dynamic_cast
を使用してダウンキャストすることはできますか?dynamic_castを使用したダウンキャストが返されます。
struct A {
virtual ~A() {}
};
struct B : A {};
int main()
{
A* a = new A();
B* b = dynamic_cast<B*>(a);
if(b){
std::cout << "b has value" << std::endl;
}else{
std::cout << "no value" << std::endl;
}
}
このコードは「値なし」を表示します。
FYI casting * down *継承チェーンはダウンキャストと呼ばれます。 – NathanOliver
AからBを得ることはできません。 BインスタンスにはAインスタンスより多くのデータメンバーがありましたか? –
'A'を' B * 'にダウンキャストすることはできません。 'B'を指していないので、' A'を指しています。 'A'は' B'ではありません。しかし、 'B *'がBを指しているので、 'A *'に 'B *'をキャストすることができます。これは "A"(継承の定義)です – KABoissonneault