码迷,mamicode.com
首页 > 其他好文 > 详细

虚函数的工作原理

时间:2014-12-17 17:56:47      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:blog   http   ar   sp   div   2014   log   bs   as   

c++规定了虚函数的行为,但将实现方法留给了编译器作者。通常,编译器处理虚函数的方法是:

给每个对象添加一个隐藏成员。隐藏成员中保存了一个指向函数地址数组的指针。这种数组称为虚函数表。

虚函数表中存储了为类对象进行声明的虚函数的地址。例如,基类对象包含一个指针,该指针指向基类中的所有虚函数的地址表。

派生类对象将包含一个指向独立地址表的指针。如果派生类提供了虚函数的新定义,该虚函数表将保存新函数的地址;如果

派生类没有重新定义虚函数,该vtbl将保存虚函原始版本的地址。如果派生类定义了新的虚函数,则该函数的地址也将被添加到vtpl中。

注意:无论类中包含的虚函数是1个还是10个,都只需要在对象中添加一个地址成员,只是表的大小不同而已。

class Scientist{

  ...
  char name[40];
public:
  virtual void show_name();
  virtual void show_all();
  ...        
    
};
class Physicist:public Scientist{

  ...
 char field[40];
 public:
 void show_all();  //重定义
 virtual void show_field(); //声明新的虚函数
 ...  

};

  bubuko.com,布布扣

 

虚函数的工作原理

标签:blog   http   ar   sp   div   2014   log   bs   as   

原文地址:http://www.cnblogs.com/luoweiKnowledge/p/4169766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!