从基类到不同派生类的多重继承转换 [英] Multiple inheritance casting from base class to different derived class

查看:23
本文介绍了从基类到不同派生类的多重继承转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

演示

这篇关于从基类到不同派生类的多重继承转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆