Chinaunix首页 | 论坛 | 博客
  • 博客访问: 971472
  • 博文数量: 120
  • 博客积分: 6454
  • 博客等级: 准将
  • 技术积分: 1739
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-28 17:45
文章分类

全部博文(120)

文章存档

2014年(1)

2013年(1)

2012年(11)

2011年(16)

2010年(6)

2009年(11)

2008年(30)

2007年(44)

分类: C/C++

2008-05-21 17:00:14

     观点一:万一class设计者没有辨识出应该成为虚函数的函数,derived class设计者就没有办法改写这个必要的函数了。所以,应该将所有的member function都声明为虚函数。
     观点二:虚函数比非虚函数缺乏效率。由于它们没办法做成inline函数(inline函数的行为发生于编译时期,虚函数在执行时期获得解析),因此,可能成为程序缺乏效率的罪魁祸首,特别是哪些小小的、常被调用的“与类型无关”的函数。
     很可能class设计者会预料某些函数将来会有不同的行为,并于derived classes中被改写(overridden)。如果base class设计者无法认知这样的需要,derived class设计者就像画一艘无浆的船一样,因为他没有虚拟函数可用(可改写),但是一旦class拥有一个虚函数,该class的每一个对象都将有一个虚拟指针(vptr)指向一个虚拟表格(vtbl),其中内含该class的所有虚拟函数地址(每个对象有一个vptr,每个class有一个vtbl)。因此,让所有member functions都成为虚函数,可能会影响效率,因为所有member fucntions都需付出动态分配(dynamic dispatch)的成本,另一个重点是,虚函数无法inlined。所以,基于效率因素,只有在某些函数必须是vitrual时,我们才将他声明为virtual,而其结果就是它可以再derived classes中被改写(overridden)。
阅读(1776) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~