C++ 中的多重继承转换

multiple inheritance cast in c++

本文关键字:转换 多重继承 C++      更新时间:2023-10-16

我有一个关于多重继承转换的问题。我有 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

但是,我想要实现的目标对我来说听起来是合法的。是吗?我做错了什么。谢谢

ReadFileSharedReadWriteSharedFile是不相关的类,尽管它们继承了一些相同的基类。因此,不能将引用/指针强制转换为另一个。

你的函数可能应该使用接口ReadFileWriteFile,而不是需要它们的特定实现。这是接口背后的主要思想。有关更多详细信息,请参阅C++接口类 - 简介。

dynamic_cast<>用于将派生类指针向上转换为其主要升序类之一。在您的情况下ReadWriteShared类不是从ReadFileShared派生的,因此dynamic_cast<>将返回空指针。