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
演示
这篇关于从基类到不同派生类的多重继承转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从基类到不同派生类的多重继承转换
基础教程推荐
- 将不可复制的闭包对象传递给 std::function 参数 2021-01-01
- C++:获取传递给函数的多维数组的行大小 2021-01-01
- 提升 ASIO 流缓冲 2021-01-01
- c++ STL设置差异 2022-01-01
- 随机插入/删除的综合向量与链表基准 2022-01-01
- 如何在 C++ 中正确使用命名空间? 2022-01-01
- 与 CAS 的原子交换(使用 gcc 同步内置函数) 2022-01-01
- 为什么我们不能使用“虚拟继承"?在 COM 中? 2022-01-01
- 如何更改 SysDateTimePick32 或 CDateTimeCtrl 的背景颜色? 2022-01-01
- 如何部分禁用 cmake C/C++ 自定义编译器检查 2021-01-01
