C++ 中的多重继承转换
multiple inheritance cast in c++
我有一个关于多重继承转换的问题。我有 3 个基类
class ReadFile;
class WriteFile
class SharedObject; // this class is basically a mutex
基于我构建的那些类:
class ReadWriteFile : public ReadFile, public WriteFile
{ ... };
class ReadWriteSharedFile : public ReadWriteFile , public SharedObject
{ ... };
class ReadFileShared : public ReadFile, public SharedObject
{ ... };
在我的代码的某个点,我有一个 ReadWriteSharedFile 指针,我想将其转换为指向 ReadFileShared 的指针
ReadFileShared * l_data = dynamic_cast<ReadFileShared * >(m_data); // m_data is a ReadWriteSharedFile
它编译但在执行时,强制转换"失败"并且l_data为 NULL
但是,我想要实现的目标对我来说听起来是合法的。是吗?我做错了什么。谢谢
ReadFileShared
和ReadWriteSharedFile
是不相关的类,尽管它们继承了一些相同的基类。因此,不能将引用/指针强制转换为另一个。
你的函数可能应该使用接口ReadFile
和WriteFile
,而不是需要它们的特定实现。这是接口背后的主要思想。有关更多详细信息,请参阅C++接口类 - 简介。
dynamic_cast<>
用于将派生类指针向上转换为其主要升序类之一。在您的情况下ReadWriteShared
类不是从ReadFileShared
派生的,因此dynamic_cast<>
将返回空指针。
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- C++中模板化异常类的多重继承
- 虚拟继承中是否存在多重继承?
- 如何在 c++ 多重继承中调用父非虚函数?
- C++ MSVC 中的访问冲突,但不在 GCC 中进行多重继承和强制转换
- 在多重继承场景中动态强制转换类型
- 将void*强制转换为具有多重继承的类
- 多重继承强制转换未按预期工作
- c++多重继承强制转换是如何工作的
- C++ 从接口和强制转换的多重继承
- 虚拟多重继承和强制转换
- 强制转换为多重继承
- C++ 中的多重继承转换
- 多重继承c++,如何进行类型转换
- c++中具有多重继承的强制转换
- 多重继承和强制类型转换
- 当使用多重继承时,静态强制转换是安全的
- 从基类到不同派生类的多重继承强制转换
- 将我的c++代码转换为Java:转换多重继承
- 如何使用多重继承执行强制转换