标签:
类中的成员函数分为静态成员函数和非静态成员函数,而非静态成员函数又分为普通函数和虚函数。
Q: 为什么使用虚函数
A: 使用虚函数,我们可以获得良好的可扩展性。在一个设计比较好的面向对象程序中,大多数函数都是与基类的接口进行通信。因为使用基类接口时,调用基类接口的程序不需要改变就可以适应新类。如果用户想添加新功能,他就可以从基类继承并添加相应的新功能。
Q: 简述C++虚函数作用及底层实现原理
A: 要点是要答出虚函数表和虚函数表指针的作用。
C++中虚函数使用虚函数表和虚函数表指针实现,虚函数表是一个类的虚函数的地址表,用于索引类本身以及父类的虚函数的地址,假如子类重写了父类的虚函数,则对应在虚函数表中会把对应的虚函数替换为子类的函数的地址(子类中可以不是虚函数,但是必须同名);虚函数表指针存在于每个对象中(通常出于效率考虑,会放在对象的开始地址处),它指向对象所在类的虚函数表的地址;在多继承环境下,会存在多个虚函数表指针,分别指向对应不同基类的虚函数表。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
虚函数表是每个有虚函数的类对应一个。虚函数表指针是每个对象对应一个。
ref:
http://blog.csdn.net/haoel/article/details/1948051
http://songlee24.github.io/2014/09/02/cpp-virtual-table/
标签:
原文地址:http://www.cnblogs.com/forcheryl/p/4705848.html