C++中不能声明为虚函数的有哪些函数

非友构内静

构造函数:

首先明确一点,在编译期间编译器完成了虚表的创建,而虚指针在构造函数期间被初始化。

如果构造函数是虚函数,那必然需要通过虚指针来找到虚构造函数的入口地址,但是这个时候我们还没有把虚指针初始化。因此,构造函数不能是虚函数。

內联函数:

编译期內联函数在调用处被展开,而虚函数在运行时才能被确定具体调用哪个类的虚函数。內联函数体现的是编译期机制,而虚函数体现的是运行期机制。

静态成员函数:

静态成员函数和类有关,即使没有生成一个实例对象,也可以调用类的静态成员函数。而虚函数的调用和虚指针有关,虚指针存在于一个类的实例对象中,如果静态成员函数被声明成虚函数,那么调用成员静态函数时又如何访问虚指针呢。总之可以这么理解,静态成员函数与类有关,而虚函数与类的实例对象有关。

友元函数:

C++不支持友元函数继承,而虚函数,尤其是纯虚函数需要在派生类中继承或重新实现。

非成员函数:

虚函数的目的是为了实现多态,多态和继承有关。所以声明一个非成员函数为虚函数没有任何意义。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

18 − 6 =

+ 23 = 24