虚函数是为了实现动态绑定,不能声明为虚函数的有:
- 静态成员函数
- 类外的普通函数
- 构造函数
- 友元函数
此外,还有一些函数可以声明为虚函数,但是没有意义,但编译器不会报错,如:
- 赋值运算符的重载成员函数: 因为复制操作符的重载函数往往要求形参与类本身的类型一致才能实现函数功能,故形参类型往往是基类的类型,因此即使声明为虚函数,也把虚函数当普通基类普通函数使用。
- 内联函数:内联函数目的是在代码中直接展开(编译期),而虚函数是为了继承后能动态绑定执行自己的动作(动态绑定),因此本质是矛盾的,因此即使内联函数声明为虚函数,编译器遇到这种情况是不会进行inline展开的,而是当作普通函数来处理。因此声明了虚函数不能实现内敛的,即内敛函数可以声明为虚函数,但是毫无了内联的意义