以某种方式将基类的指针强制转换为未知子类
casting pointer of base class to unknown subclass possible somehow?
>场景:
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
因此,每个子类对象都可以访问getDescriptor。
SubClassX* pointer = &subClassXObject;
pointer->getDescriptor(); // This should work
(还是不是?现在我遇到了问题:我是否必须在子类中显式实现基类公共方法,以便有人能够从外部对子类调用它?不...,不是吗?
我喜欢
BaseClass* pointer = &subClassXObject;
pointer->getDescriptor();
去工作。
可以将getDescriptor从BaseInstance和Instance移动到BaseClass和每个子类,但是我希望BaseClass的用户只编写应用程序逻辑代码,而不是基础结构代码(即使他们只需要返回Instance
强制转换为指向 BaseInstance* 的指针会使应用程序崩溃。因此,我的问题在标题中措辞。
感谢您的关心!
只需使用 virtual 关键字定义基类中的函数,右派生类将自动拾取。
class Base{
public:
virtual int getDescriptor();
};
将 BaseClass* 指针声明为 BaseInstance* 指针。然后不需要石膏,它可以工作。
您只能使用 BaseInstance 方法,因为届时强制转换为 BaseClass* 会崩溃。由于这些方法是从对象浏览器使用的,因此这是关于基础结构函数的,因此它们在 BaseInstance 中比在 BaseClass 中更有意义,因此无法使用 BaseClass 方法很好(BaseClass 最好只包含基本应用程序逻辑方法(。
- 将父类对象强制转换为子类的问题
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 无法将模板子类强制转换为其他模板实例化
- 从父类的向量访问子类函数,而无需向下转换
- 带有基类指针的强制转换向量,指向子类
- 将子类的成员函数强制转换为父类
- C++ QList 中项目的 QT 强制转换到子类
- 将"this"从父类方法转换为子类方法是一种好的做法吗?
- 将子类转换为基类
- 无法将参数 3 从 'const QGraphicsItem *' 转换为 'const QObject *',这是指针,对象是 QGraphicsObject 的子类
- C 错误:从(基类模板)到子类的无效转换
- 从子类到具有相同基数的抽象子类的隐式转换
- 子类ConstexPR类以获得不同的用户定义的转换行为
- 如何在模板子类中重写转换运算符C++
- 模板化函数指针从子类到父类的转换
- 无法将超类强制转换为子类
- 将子类列表转换为超类列表
- C++从接口类到子类的转换无效
- 不能转换子类..到其私有基类
- 用简单的操作转换子类向量时得到错误