微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c铸造基类派生类乱

如果我创建一个名为base和派生类的基类,称为derived_1,derived_2等…我使用基类的实例集合,然后当我检索到一个元素并尝试使用它时,我会发现C认为它是类型是基类的,可能是因为我从基础的std :: vector检索它.当我想要使用仅存在于特定派生类的功能时,这是一个问题,我知道这个对象是我将其放入向量时的类型.

所以我把元素放入应该是这样的类型,发现这不行.

(derived_3)obj_to_be_fixed;

并记得这是一个指针的东西.经过一些调整,现在工作了.

*((derived_3*)&obj_to_be_fixed);

这是正确的还是有例如一个abc_cast()函数,它减少了混乱?

编辑:

我不得不将其扩展到另一个问题,全面的解决方显示在那里. stackoverflow.com … why-the-polymorphic-types-error-and-cleanup-question

解决方法

如果您将对象存储在std :: vector< base>没有办法回到派生类.这是因为派生的部分在将其存储在基类的实例中时已被切片(之后,您的向量包含数据的副本,因此它只会快速复制对象的基本部分),从而使存储的对象成为基类,而不是用作基类的派生类.

如果要在矢量中存储多态对象,使其成为一个std :: vector< base *> (或某种智能笔记本到基地,但不是本身),并使用dynamic_cast< derived_3 *>将其转换为正确的类型(或static_cast,如果其性能敏感,并且您有足够的信心,您正在尝试投射到正确的类型(在这种情况下,如果您的错误会发生可怕的事情,所以请注意)).

原文地址:https://www.jb51.cc/c/115174.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐