如何将对象'cast'为其超类继承的类?

How to 'cast' an object to a class inheritated by its superclass?

本文关键字:继承 超类 cast 对象      更新时间:2023-10-16

我有:(pseudocode)

A_GItem_rect::A_GItem_rect ( ) : QGraphicsRectItem () ,  A_GItem_base() 

好的,G_graphicsRcetItem,它又继承了QGRaphicsShapeitem

G_item_basew_setPen()方法。

在它里面任何后面的命令意味着一个崩溃:

((QAbstractGraphicsShapeItem *) this)->setPen(my_pen);
QAbstractGraphicsShapeItem * r = reinterpret_cast<QAbstractGraphicsShapeItem*>(this ) ;

我该如何解决这个问题?由于

你为什么要做这种可怕的事?

A_GItem_rectQAbstractGraphicsShapeItem的子类时,您不必使用this指针来访问setPen方法。一个简单的this->setPen()就足够了。如果你明确地想要QAbstractGraphicsShapeItem版本的方法,你必须像这样调用它:QAbstractGraphicsShapeItem::setPen() .

reinterpret_cast is bad!尤其是当你不知道自己在做什么的时候。如果您确实需要强制转换对象,请先尝试dynamic_cast

当你在类层次中移动时,你应该使用dynamic_cast,然后检查返回值,看看你是否成功(!=NULL)