哪些函数不能为virtual函数

1> 内联函数

内联函数是在编译时期展开,而虚函数的特性是运行时才动态联编,所以两者矛盾,不能定义内联函数为虚函数。

虚表机制需要一个真正的函数地址,而内联函数展开以后,就不是一个函数,而是一段简单的代码(多数C++对象模型使用虚表实现多态,对此标准提供支持)

2> 构造函数

构造函数用来创建一个新的对象,而虚函数的运行是建立在对象的基础上,在构造函数执行时,对象尚未形成,所以不能将构造函数定义为虚函数。

简单来说就是:虚函数对应一个指向vtable虚函数表的指针,虚函数的执行依赖于虚函数表。而虚函数表在构造函数中进行初始化工作,即初始化vptr,让他指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初始化,将无法进行。

3> 静态成员函数

静态成员函数属于一个类而非某一对象,没有this指针,它无法进行对象的判别

4>友元函数
因为C++不支持友元函数的继承,对于没有继承特性的函数没有虚函数的说法。

http://blog.csdn.net/freeboy1015/article/details/7635012

http://blog.csdn.net/yapian8/article/details/42532075

原文地址:https://www.cnblogs.com/zhaobinyouth/p/6168968.html