をキャスト、私は次のクラスがあります。C++多重継承と
class A { };
class B {
public:
B(){}
virtual ~B(){};
};
class B1 : public B{
public:
B1(){}
virtual ~B1(){};
};
class B2 : public B{
public:
B2(){}
virtual ~B2(){};
};
class C1 : public A, public B1{
public:
C1(){}
virtual ~C1(){};
};
class C2 : public A, public B2{
public:
C2(){}
virtual ~C2(){};
};
私はタイプBのオブジェクトは、タイプAのもあるかどうかを知りたい:
B*b = new C1(); // or new B, or new C2 ...
if(dynamic_cast<A*>(b))
{
...
が正しい方法私のdynamic_castですそれをコンパイルして実行しますか? ありがとうございます。
あなたのキャストは無効だと思います。 AとBはお互いの子を持つからといって、お互いにキャストできるわけではありません。 – AntoineB
'b'は' B * 'として宣言していますが、' new C1() 'で作成されているので、正当に' A * 'であり、あなたのコードは動作します。 'new B()'を実行しようとすると、これは失敗します。 'C1'は' A'から継承しますが、 'B'は継承しません。 –