设为首页 加入收藏

TOP

15.4.2 RTTI的工作原理(4)
2013-10-07 15:45:04 来源: 作者: 【 】 浏览:90
Tags:15.4.2 RTTI 工作 原理

15.4.2  RTTI的工作原理(4)

程序清单15.18所示程序的运行情况如下:

 

与前一个程序的输出一样,每次运行该程序的输出都可能不同,因为它使用rand( )来选择类型。另外,调用name()时,有些编译器可能提供不同的输出,如5Grand(而不是Grand)。

3.误用RTTI的例子

C++(www.cppentry.com)界有很多人对RTTI口诛笔伐,他们认为RTTI是多余的,是导致程序效率低下和糟糕编程(www.cppentry.com)方式的罪魁祸首。这里不讨论对RTTI的争论,而介绍一下应避免的编程(www.cppentry.com)方式。

请看程序清单15.17的核心代码:

 
通过放弃dynamic_cast和虚函数,而使用typeid,可以将上述代码重新编写为:

 
上述代码不仅比原来的更难看、更长,而且显式地指定各个类存在严重的缺陷。例如,假设您发现必须从Magnificent类派生一个Insufferable类,而后者需要重新定义Speak( )和Say( )。使用typeid来显示地测试每个类型时,必须修改for循环的代码,添加一个else if,但无需修改原来的版本。下面的语句适用于所有从Grand派生而来的类:

 
而下面的语句适用于所有从Superb派生而来的类:

 

提示:如果发现在扩展的if else语句系列中使用了typeid,则应考虑是否应该使用虚函数和dynamic_cast。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.3.11 有关异常的注意事项 下一篇15.4.2 RTTI的工作原理(3)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)