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 ) ;