首页 > 试题广场 >

关于虚函数的描述中,( )是正确的。

[单选题]

关于虚函数的描述中,( )是正确的。

  • 虚函数是一个static类型的成员函数
  • 虚函数是一个非成员函数
  • 基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数
  • 派生类的虚函数与基类的虚函数具有不同的参数个数和类型
哪位大神可以详细的解释呢?
发表于 2017-07-11 07:45:47 回复(0)
A答案:静态成员函数,可以不通过对象来调用,即没有隐藏的this指针。virtual函数一定要通过对象来调用,即有隐藏的this指针。所以虚函数不可以是static的;
B答案:这很明显吧,怎么不叫成员函数呢orz;
C答案:这个就是虚函数的特性,只要派生类的函数与基类的同原型(函数返回类型、函数名和形参列表),自动转为虚函数,不需要声明virtual; 
D答案:参考C答案,如果不同的话就叫作函数重载了。
欢迎指正!
发表于 2017-09-07 09:16:49 回复(2)
虚函数只能是类中成员函数且不能是静态;故A选项、B选项错误。
虚函数下重新定义时参数的个数和类型必须和基类中的虚函数完全匹配,这一点和函数重载完全不同;故D选项错误。
发表于 2018-07-13 11:31:08 回复(0)
当基类中的成员函数被声明为虚函数时,在派生类中重新定义该函数时,默认情况下它仍然是虚函数。即使在派生类中不使用 virtual 关键字显式声明为虚函数,它仍然具有虚函数的特性。这样,派生类的对象可以通过基类指针或引用来调用该函数时,会根据对象的实际类型而调用派生类的函数。
发表于 2023-10-19 16:12:13 回复(0)
c
发表于 2021-01-21 16:42:32 回复(0)
D.会遮掩继承来的函数
发表于 2020-09-23 08:21:53 回复(0)
派生类析构函数的函数名与基类不一样,同样也可以变成虚函数。所以D怎么就对了?

发表于 2020-03-04 23:35:26 回复(0)
虚函数是成员函数,有隐藏的this指针--所以不能被声明为static的静态函数(静态函数不需要对象调用,没有隐藏的this指针)。只要基类的虚函数有virtual就可以,其继承类只要有相同函数(名称,返回值,参数列表)就可以看作是其虚函数的实例,在动态调用(使用指向继承类的基类指针)时就可以使用
发表于 2020-02-16 14:17:02 回复(0)
解析:
关于虚函数的知识点:
(1)在基类用virtual声明的成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便被调用。在类外定义虚函数时,不必加virtual。
 (2)在派生类中重新定义此函数,要求函数名,函数类型,函数参数个数和类型全部与基类的虚函数相同,并根据派生类的需要重新定义函数体。c++规定,当一个成员函数被声明为虚函数后,其派生类的同名函数都自动成为虚函数。因此在派生类重新声明该虚函数时,可以加virtual,也可以不加,但习惯上一般在每层声明该函数时都加上virtual,使程序更加清晰。如果再派生类中没有对基类的虚函数重新定义,则派生类简单的继承起基类的虚函数。 
(3)定义一个指向基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象。
(4)通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。


发表于 2018-03-30 18:47:47 回复(0)
       在某 基类 中声明为 virtual 并在一个或多个 派生类 中被重新定义的 成员函数 ,用法格式为:virtual 函数返回类型 函数名(参数表) { 函数体 };实现 多态性 ,通过指向派生类的基类 指针 或引用,访问派生类中同名覆盖成员函数。
        我们只需在把基 类的成员函数 设为virtual,其 派生类 的相应的函数也会自动变为虚函数。
发表于 2017-05-26 11:57:17 回复(0)