【C++面试】关于虚函数的常见问题
1.虚函数的代价
1)带有虚函数的每个类会产生一个虚函数表,用来存储虚成员函数的指针
2)带有虚函数的每个类都会有一个指向虚函数表的指针
3)不再是内敛函数,因为内敛函数可以在编译阶段进行替代,而虚函数表示等待,在运行阶段才能确定到达采用哪种函数,所以虚函数不是内敛函数
2.那些函数不能是虚函数?
1)构造函数:对象的虚函数表指针需要通过构造函数初始化
2)内联函数:内联函数可以在编译阶段进行函数体的替换,而虚函数需要在运行期间进行确定
3)静态函数:静态函数不属于对象而属于类,因为静态成员函数没有this指针,所以无法访问对象的虚表指针,也就
无法访问类的虚函数表,将静态函数设置成虚函数也就没有任何意义,所以c++语法不支持将静态函数设置成虚函数
4)友元函数:友元函数不属于类,也不能被继承,没有继承特性的函数没有虚函数的说法