【问题标题】:Returning pointer to inherited class C++返回指向继承类 C++ 的指针
【发布时间】:2017-07-30 04:03:11
【问题描述】:

我有一个基类 (node),它被 node2D 继承,它被 CSprite2D 继承(我正在开发一个游戏引擎)

我有一个指向从 NODE 继承的对象的指针向量。

在我的函数CNode* getNodeByName(QString name)我返回一个CNode,但我做不到

CSprite2D* sprite = getNodeByName("hello")

为什么会这样?有什么办法可以解决?我已经尝试过它返回一个 CSprite2D,它就像一个魅力。 我已经尝试将我的函数声明为virtual CNode* getNodeByName(Qstring name)

PS:如果这很重要,我正在使用 Qt。而且,我是 C++ 新手,所以我可能监督了一些事情。

【问题讨论】:

  • 如果您确定 CNode* 是 CSpirite2D* 类型,您可以将其转换为 CSprite2D*,请参阅cplusplus.com/doc/tutorial/typecasting 了解有关转换和不同类型转换的更多信息。
  • CNodeCSprite2D是什么关系?
  • CSprite2D 继承自 CNode2D,CNode2D 继承自 CNode。 @彼得
  • @basslo 你能举个小例子吗?我似乎找不到实现类型转换功能的方法。
  • 好的,是的,我完全确定它是 CSprite2D 所以...非常感谢;)

标签: c++ qt inheritance polymorphism


【解决方案1】:

如果 CSprite2D 继承了 CNode(在你的问题中你说的是节点),你可以执行以下操作:

CSprite2D* sprite = static_cast< CSprite2D* >(getNodeByName("hello"));

仅当您确定返回的对象是 CSprite2D* 时,否则它是未定义的行为

您也可以使用 dynamic_cast(参见 link 中的示例),dynamic_cast 将返回一个空指针或者如果转换失败。

CSprite2D* sprite = dynamic_cast< CSprite2D* >(getNodeByName("hello"));

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多