场景:
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++ 标准术语可能将 object 定义为已经是地址,在这种情况下 &... 是对象本身
此时 subClassXObject 的类是未知的,它可以是 BaseClass 的任何定义的子类。
众所周知,它是 BaseClass 的直接派生子类之一,每个子类也继承自 Instance<subClassX>,其中 subClassX 是 BaseClass 的直接派生子类的名称。
Instance<subClassX> 继承自 BaseInstance。BaseInstance 定义了一个由 Instance<subClassX> 实现的公共纯虚函数,它的名字叫 getDescriptor。
因此,每个 subClassObject 都可以访问 getDescriptor。
SubClassX* pointer = &subClassXObject;
pointer->getDescriptor(); // This should work
(或者不是吗?现在我很困惑:我是否必须在子类中显式实现基类公共方法,以便有人能够从外部调用子类?不......,不是吗? )。
我喜欢
BaseClass* pointer = &subClassXObject;
pointer->getDescriptor();
去工作。
将 getDescriptor 从 BaseInstance 和 Instance<subClassX> 移动到 BaseClass 和每个子类是可能的,但是我希望我的 BaseClass 的用户只编写应用程序逻辑代码,而不是基础设施代码(即使他们只需要返回一个 Instance<subClassX> 方法返回值)。这背后的想法是创建一个对象浏览器,每个子类实例化的对象都被输入和列出,而用户不必添加任何非类目的代码。
将指针转换为 BaseInstance* 会使应用程序崩溃。因此,我的问题如标题中所述。
感谢您的关心!