C++ 如何';铸造';由其超类继承的类的对象?

C++ 如何';铸造';由其超类继承的类的对象?,c++,casting,superclass,C++,Casting,Superclass,我有:(伪代码) 好的,G_graphicsretItem,它依次继承QGRaphicsShapeitem G_item_base有一个w_setPen()方法 在其内部,任何下一个表示chrash的命令: ((QAbstractGraphicsShapeItem *) this)->setPen(my_pen); QAbstractGraphicsShapeItem * r = reinterpret_cast<QAbstractGraphicsShapeItem*>(thi

我有:(伪代码)

好的,
G_graphicsretItem
,它依次继承
QGRaphicsShapeitem

G_item_base
有一个
w_setPen()
方法

在其内部,任何下一个表示chrash的命令:

((QAbstractGraphicsShapeItem *) this)->setPen(my_pen);
QAbstractGraphicsShapeItem * r = reinterpret_cast<QAbstractGraphicsShapeItem*>(this ) ;
((QabStretchGraphicsShapeItem*)this)->setPen(我的笔);
QAbstractGraphicsShapeItem*r=重新解释铸件(此);

我怎样才能解决这个问题。谢谢你为什么要做这么可怕的事

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


reinterpret\u cast
不好!尤其是当你不知道自己在做什么的时候。如果您确实必须强制转换对象,请先尝试
动态强制转换

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

您在问题中提到了7个不同的类:
a\u GItem\u rect
QGraphicsRectItem
A_GItem_base
G_graphicsretItem
QGRaphicsShapeitem
G_item_base
QAbstractGraphicsShapeItem
。真的不清楚哪些是相关的,它们之间的关系是什么。是的,但这几乎肯定不是OP问题的正确解决方案。但是我需要/想要在一个库中获得关于我笔的信息。也许我会在设置笔之前对这些信息做些什么。这是因为我需要访问QabstracGraphChissShapeItem超类(或基类)的setpen,以及。。。在一个基础中,我无法访问超类。。。这是因为我尝试使用QasBractGraphChissShapeItem设置画笔……您不应该在那里使用此函数。也许你可以尝试另一种继承方案。例如:让
A_Gitem_Base
成为
qastractgraphchisshapeitem
的子类。
((QAbstractGraphicsShapeItem *) this)->setPen(my_pen);
QAbstractGraphicsShapeItem * r = reinterpret_cast<QAbstractGraphicsShapeItem*>(this ) ;