如何将对象“强制转换”为由其超类继承的类?

时间:2011-11-23 11:26:44

标签: c++ casting superclass

我有:(伪代码)

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

好的,G_graphicsRcetItem依次继承QGRaphicsShapeitem

G_item_basew_setPen()方法。

在其中的任何下一个命令意味着chrash:

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

我该如何解决这个问题。谢谢

2 个答案:

答案 0 :(得分:2)

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

A_GItem_rectQAbstractGraphicsShapeItem的子类时,您不必使用this指针来访问setPen方法。一个简单的this->setPen()就足够了。如果您明确需要方法的QAbstractGraphicsShapeItem版本,则必须按以下方式调用它:QAbstractGraphicsShapeItem::setPen()

reinterpret_cast 错误!特别是当你不知道自己在做什么的时候。如果你真的需要施放物体,先试试dynamic_cast

答案 1 :(得分:0)

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