Multiple inheritance casting from base class to different derived class(从基类到不同派生类的多重继承转换)
问题描述
假设有这样的类层次结构:
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*).
因为A和B的地址在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
演示
这篇关于从基类到不同派生类的多重继承转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从基类到不同派生类的多重继承转换
- 静态初始化顺序失败 2022-01-01
- 使用/clr 时出现 LNK2022 错误 2022-01-01
- STL 中有 dereference_iterator 吗? 2022-01-01
- 一起使用 MPI 和 OpenCV 时出现分段错误 2022-01-01
- 如何对自定义类的向量使用std::find()? 2022-11-07
- Stroustrup 的 Simple_window.h 2022-01-01
- 从python回调到c++的选项 2022-11-16
- C++ 协变模板 2021-01-01
- 与 int by int 相比,为什么执行 float by float 矩阵乘法更快? 2021-01-01
- 近似搜索的工作原理 2021-01-01
