Chinaunix首页 | 论坛 | 博客
  • 博客访问: 627831
  • 博文数量: 138
  • 博客积分: 3067
  • 博客等级: 中校
  • 技术积分: 1565
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-21 12:44
文章分类

全部博文(138)

文章存档

2016年(5)

2014年(4)

2012年(1)

2011年(2)

2010年(10)

2009年(19)

2008年(97)

我的朋友

分类:

2008-04-11 15:59:38

小结
  • 每个类都向外给出两个接口:一个面向用户,另外一个面向派生类
  • 对于一个会被用来作为基类的类来说, 我们应该同时设计和记录下这两个接口(以及和他们相对应的抽象模型)
  • 为继承所进行的设计会带来运行时的性能损耗,并使得抽象模型更加复杂。对于某些类来说,他们很有用,但对于其他类来说则非如此。
  • 所有被用来继承的类都应该拥有一个虚析构函数。
  • 虚基类是在最外层的派生类中被初始化的。
  • 避免使用保护型数据。
  • 将小的、经常被调用的函数声明为虚函数会导致程序的运行速度显著变慢
  • 对于中等和大规模的成员函数来说,将他们声明为虚函数时不要犹豫-这样做并不会给性能带来显著的变化(考虑他的调用时间和执行时间比)
  • 动态绑定的最大开销并不在于运行时分发所带来的执行时间,而是来自于”被动态绑定的函数不能被内嵌”这个事实。
  • 使用基类来提供影响到整个对象的服务。

问题:
  1. 什么情况下,一个“聪明的“编译器可以对虚函数调用采取静态绑定的方式?
  2. 声明一个虚的内嵌函数是否有意义?如果有的话那么在什么情况下我们可以声明一个虚的内嵌函数?
  3. 在什么情况下,将大函数声明为虚函数会导致性能上的巨大开销?(提示:是否所有的大函数都必须长时间运行)
    1. 大函数(比如多个case语句,会使他很大)但执行时间短
    2. 大函数(包含很多判断,跳出)的全部函数体执行的命中率(可能大多数情况下只执行一部分就直接返回)影响其执行时间。
  4. ”设计时考虑到继承会导致额外的工作“这个事实是否来自于C++语言规则?如果我们使用不同的面向对象编程语言来做同样的事情时,这个事实是否依然成立?

阅读(767) | 评论(0) | 转发(0) |
0

上一篇:google reader

下一篇:蛙泳常见错误

给主人留下些什么吧!~~