首页 > 试题广场 >

下面哪些函数不能被声明为虚函数( &nb...

[不定项选择题]
下面哪些函数不能被声明为虚函数(      )
  • 构造函数
  • 静态成员函数
  • 内联函数
  • 友元函数
以上几类函数都不可声明为虚函数:
构造函数:虚函数是运行时绑定,需要对象,所以要先调用构造函数
静态成员函数:只有一份大家共享
内联函数:编译时就展开,而虚函数是运行时绑定
友元函数:友元函数不能被继承,所以不存在虚函数
编辑于 2019-10-17 12:16:52 回复(5)
不能声明为虚函数的函数
1,普通函数(非成员函数):定义虚函数的主要目的是为了重写达到多态,所以普通函数声明为虚函数没有意义,因此编译器在编译时就绑定了它。
2,静态成员函数:静态成员函数对于每个类都只有一份代码,所有对象都可以共享这份代码,他不归某一个对象所有,所以它也没有动态绑定的必要。,
3,内联成员函数:内联函数本就是为了减少函数调用的代价,所以在代码中直接展开。但虚函数一定要创建虚函数表,这两者不可能统一。另外,内联函数在编译时被展开,而虚函数在运行时才动态绑定。
4,构造函数:这个原因很简单,主要从语义上考虑。因为构造函数本来是为了初始化对象成员才产生的,然而虚函数的目的是为了在完全不了解细节的情况下也能正确处理对象,两者根本不能“ 好好相处 ”。因为虚函数要对不同类型的对象产生不同的动作,如果将构造函数定义成虚函数,那么对象都没有产生,怎么完成想要的动作??
5,友元函数:当我们把一个函数声明为一个类的友元函数时,它只是一个可以访问类内成员的普通函数,并不是这个类的成员函数,自然也不能在自己的类内将它声明为虚函数。

注意:友元本身可以是虚函数!!
如果一个类的友元函数是另一个类成员函数,那么它在自己的类内可以被声明为虚函数。
原文链接:https://blog.csdn.net/ly_6699/article/details/89105680
发表于 2020-05-20 17:22:53 回复(1)
构造函数:因为虚函数对应一个虚表,这个表的地址存储在对象的内存空间中,对象在调用虚函数时,是通过虚指针指向虚表,来进行调用。若为虚构造,则不能实例化对象,没有内存空间分配。

静态成员函数:所有对象共享静态成员函数,静态成员函数属于类,不属于对象,没有this指针,无法进行类对象的判别。

内联函数:内联函数是在编译阶段直接展开,而虚函数在运行时才进行动态绑定,二者矛盾。

友元函数不能为虚函数:c++11不支持友元继承,对于没有继承性的函数没有虚函数的说法。
发表于 2022-04-28 17:53:56 回复(0)

内联函数不能为虚函数,因为内联函数是静态的,虚函数是动态的

发表于 2019-12-25 21:12:24 回复(0)
析构函数不也是构造函数么?
发表于 2023-04-28 15:12:01 回复(1)
可是类里面的成员函数不是默认就是内联函数吗
发表于 2022-09-23 15:58:00 回复(0)
注意C 虚函数在不表现多态性的时候可以是内联的,具体就是用对象调用虚函数而不是用指针调用虚函数。但内联不能是虚函数的。
发表于 2021-05-23 11:20:48 回复(0)
      内联,构造【只初始化一次,非动态对象行为】,静态【非动态行为】,此前建议先了解虚函数定义。要想成为虚函数,必须能够被取到地址.内联函数不能被取到地址所以不能成为虚函数,inline关键字只是对编译器一个建议
       静态与非静态成员函数之间有一个主要的区别。那就是静态成员函数没有this指针,
此题不严谨,UB
建议-----A
发表于 2019-10-07 14:50:22 回复(0)

我感觉这题目应该是可以为虚函数的是……

发表于 2019-08-30 08:38:48 回复(0)