虚函数是为了实现多态,但是显然并不是所有函数都可以声明为虚函数的。
不能被声明为虚函数的函数有两类:
- 不能被继承的函数
- 不能被重写的函数
因此,这些函数都不能被声明为虚函数
- 普通函数
- 构造函数
如果构造函数定义为虚函数,则需要通过查找虚函数表来进行调用。但是构造函数是虚函数的情况下是找不到的,因为构造函数自己本身也不存在,创建不了实例,没有实例化对象,则类的成员不能被访问。 - 静态函数
- 友元函数
- 内联成员函数
内联函数是编译时展开函数体,所以在此时就需要有实体,而虚函数是运行时才有实体,所以内联函数不可以为虚函数