c++ - 以某种方式将基类的指针强制转换为未知的子类?

标签 c++ templates casting multiple-inheritance

场景:

BaseClass* pointer = &subClassXObject;  // subClassXObject is object of class subClassX 
                                        // which is derived from BaseClass and 
                                        // Instance<subClassX>. (Instance<subClassX> is 
                                        // for counting instances of type subClassX.)
                                        // Instance<subClassX> is derived from 
                                        // BaseInstance.

&... 代表获取地址,C++ 标准术语可能将对象定义为已经是地址,在这种情况下 &... 是对象本身

此时 subClassXObject 的类是未知的,它可以是 BaseClass 的任何定义的子类。

已知它是 BaseClass 的直接派生子类之一,每个子类也继承自 Instance,其中 subClassX 是 BaseClass 的直接派生子类的名称。

Instance 继承自 BaseInstance。 BaseInstance 定义了 Instance 实现的公共(public)纯虚函数,它的名字是 getDescriptor。

因此每个子类对象都可以访问 getDescriptor。

SubClassX* pointer = &subClassXObject;
pointer->getDescriptor();               // This should work

(或者不是吗?现在我很困惑:我是否必须在子类中显式实现基类公共(public)方法,以便有人能够从外部调用子类?不......,没有'我?)。

我喜欢

BaseClass* pointer = &subClassXObject;
pointer->getDescriptor();

工作。

将 getDescriptor 从 BaseInstance 和 Instance 移动到 BaseClass 和每个子类是可能的,但是我希望我的 BaseClass 的用户只编写应用程序逻辑代码,而不是基础结构代码(即使他们只需要返回Instance 方法返回值)。这背后的想法是创建一个对象浏览器,用户无需添加任何非类用途代码即可将每个子类实例化对象输入并列出。

将指针转换为 BaseInstance* 会使应用程序崩溃。因此,我的问题如标题中所述。

谢谢你的关心!

最佳答案

只需在基类中用virtual关键字定义函数,正确的派生类就会自动被拾取。

class Base{
public:
virtual int getDescriptor();
};

关于c++ - 以某种方式将基类的指针强制转换为未知的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17158541/

相关文章:

c++ - 简单的基于任务的 OpenMP 应用程序挂起

java - Android postDelayed 有效但不能将其置于循环中?

c++ - 无法转换具有多重继承的类

c++ - 将 rapidjson::Value 的元素复制到 std::vector

C++ 性能 : using declaratives Vs using declarations Vs using names directly from the library

c++ - 在类模板中推导模板成员函数

javascript - 检查 Jade mixin 中的参数

opencv - 使用Python在OpenCV中检测模板的坐标

c - 如何删除警告 : conversion to ‘char’ from ‘int’ may alter its value?

c++ - 如何通过Qt锁定数据库中的表?