从基类到不同派生类的多重继承转换

2021-12-31 00:00:00 multiple-inheritance casting c++

假设有这样的类层次结构:

Let's assume there is such class hierarchy:

class A //base class

class B //interface

class C : public A, public B

然后创建C对象:

A *object = new C();

是否可以将对象强制转换为 B ?

Is it possible to cast object to B ?

重要提示:我假设我不知道对象是 C.我只知道它实现了接口 B

Important: I assume I don't know that object is C. I just know that it implements interface B

推荐答案

否.这是不可能的(从 A* 直接转换到 B*).

No. This is not possible (direct casting from A* to B*).

因为AB的地址在class C的不同位置.所以演员表总是不安全的,你可能会遇到意外行为.演示.

Because the address of A and B are at different locations in class C. So the cast will be always unsafe and possibly you might land up in unexpected behavior. Demo.

转换应该总是通过class C.例如

The casting should always go through class C. e.g.

A* pa = new C();
B* pb = static_cast<C*>(pa);
                   ^^^^ go through class C

演示

相关文章