栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

C ++等同于Java的instanceof

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C ++等同于Java的instanceof

尝试使用:

if(NewType* v = dynamic_cast<NewType*>(old)) {   // old was safely casted to NewType   v->doSomething();}

这要求你的编译器启用rtti支持。

编辑:我对这个答案有很好的评论!

每次需要使用dynamic_cast(或instanceof)时,最好问问自己是否必要。通常,这是不良设计的标志。

典型的解决方法是将要检查的类的特殊行为放入基类的虚函数中,或者引入诸如访问者之类的东西,你可以在不更改接口的情况下为子类引入特定行为(除了添加的访问者接受接口)课程)。

如前所述,dynamic_cast不是免费提供的。一个处理大多数(但不是所有情况)的简单且性能一致的hack基本上是添加一个枚举,表示你的类可以拥有的所有可能的类型,并检查你是否找到了正确的类型。

if(old->getType() == BOX) {   Box* box = static_cast<Box*>(old);   // Do something box specific}

这不是一个好的设计,但它可能是一种解决方法,其成本或多或少只是一个虚拟函数调用。无论是否启用了RTTI,它都可以工作。

请注意,这种方法不支持多个继承级别,因此,如果你不小心,可能会以如下代码结尾:

// Here we have a SpecialBox class that inherits Box, since it has its own type// we must check for both BOX or SPECIAL_BOXif(old->getType() == BOX || old->getType() == SPECIAL_BOX) {   Box* box = static_cast<Box*>(old);   // Do something box specific}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506658.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号