1. 普通函数(非类成员函数)
- 多态依托于类实现,因此普通函数不可被声明为虚函数
2. 构造函数
- 虚表指针在构造函数中初始化,而虚函数保存在虚表中,调用虚函数时需要通过虚表指针找到虚函数
- 若构造函数是虚函数,则调用构造函数需要先得到虚表指针,而虚表指针又需要在构造函数中初始化,矛盾
3. 静态函数
- 虚函数保存在虚表中,调用虚函数时需要通过this指针得到虚表指针,再通过虚表指针找到虚函数
- 而静态函数不传入this函数,因此不可声明为虚函数
4. 内联函数
- 内联函数在编译时被展开,而多态是运行时多态,也就是运行时才确定要调用哪个虚函数,矛盾
5. 友元函数
- 友元函数不可继承,不可继承的函数不可以是虚函数