1.52、哪些函数不能被声明为虚函数?
主要有以下几类:
构造函数
构造函数在对象实例化时调用,而虚函数的动态绑定依赖于对象的虚函数表(vptr),而vptr是在对象构造完成后才存在的,因此构造函数无法是虚函数。此外,构造函数的调用不通过指针或引用,虚函数机制无意义。
静态成员函数
静态成员函数不依赖于对象实例,没有this
指针,属于类级别的函数,无法参与运行时多态,因此不能是虚函数。
友元函数
友元函数不是类的成员函数,不参与继承体系,C++不支持友元函数的虚函数特性。
非成员函数(普通函数)
普通的非成员函数不属于类的成员,不能被继承和重写,虚函数机制无意义。
内联函数
内联函数在编译时展开,虚函数的多态绑定发生在运行时,两者机制冲突。虽然语法上允许内联虚函数,但当虚函数表现多态时,编译器无法内联展开,因此内联虚函数只有在编译器能确定调用对象类型时才可能内联。
总结来说,虚函数必须是类的非静态成员函数,且依赖于对象实例的存在和继承体系的支持。构造函数、静态成员函数、友元函数、非成员函数以及内联函数(多态调用时)均不满足这些条件,因而不能声明为虚函数。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1365
文章版权归作者所有,未经允许请勿转载。
THE END