如何将对象'cast'为其超类继承的类?
How to 'cast' an object to a class inheritated by its superclass?
我有:(pseudocode)
A_GItem_rect::A_GItem_rect ( ) : QGraphicsRectItem () , A_GItem_base()
好的,G_graphicsRcetItem
,它又继承了QGRaphicsShapeitem
。
G_item_base
有w_setPen()
方法。
在它里面任何后面的命令意味着一个崩溃:
((QAbstractGraphicsShapeItem *) this)->setPen(my_pen);
QAbstractGraphicsShapeItem * r = reinterpret_cast<QAbstractGraphicsShapeItem*>(this ) ;
我该如何解决这个问题?由于
你为什么要做这种可怕的事?
当A_GItem_rect
是QAbstractGraphicsShapeItem
的子类时,您不必使用this
指针来访问setPen
方法。一个简单的this->setPen()
就足够了。如果你明确地想要QAbstractGraphicsShapeItem
版本的方法,你必须像这样调用它:QAbstractGraphicsShapeItem::setPen()
.
reinterpret_cast
is bad!尤其是当你不知道自己在做什么的时候。如果您确实需要强制转换对象,请先尝试dynamic_cast
。
当你在类层次中移动时,你应该使用dynamic_cast
,然后检查返回值,看看你是否成功(!=NULL
)
相关文章:
- 模板转换为超类
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 继承模板类中的类型别名
- 在从给定超类继承的所有类上调用虚函数
- 将 void* 强制转换为多个继承类的超类不会调用正确的方法
- 创建一系列超类的指针,以分配继承的类
- 子类未能继承超类字段
- 子类是否也在 c++ 中继承私有数据成员?但通过超类的公共方法访问
- 调用超类函数继承 c++
- 在C++中,继承超类的正确方法是什么,以便它们的子类在超级类和子类中没有重复的属性?
- 成员是否继承自超类的超类
- C++调用模板化超类的继承方法
- 超类中具有相同属性的多重继承
- 我继承基类以及多重继承的超类
- 为什么继承失败(使用超类的方法)
- 如何将对象'cast'为其超类继承的类?
- c++继承.对象调用超类方法而不是自己的方法
- 多级继承而不调用超类构造函数
- Qt:不正确的返回值从invokemethod从继承超类
- c++继承以及如何通过超类传递和维护子类数据