首页 > 试题广场 >

关于函数的描述正确的是___。

[单选题]
关于函数的描述正确的是___。
  • 虚函数是一个static型的函数
  • 派生类的虚函数与基类的虚函数具有不同的参数个数和类型
  • 虚函数是一个非成员函数
  • 基类中说明了虚函数后,派生类中起对应的函数可以不必说明为虚函数​
以关键字virtual的成员函数称为虚函数,主要是用于运行时多态,也就是动态绑定。
虚函数必须是类的成员函数,不能使友元函数、也不能是构造函数【原因:因为建立一个派生类对象时,必须从类层次的根开始,沿着继承路径逐个调用基类的构造函数,直到自己的构造函数,不能选择性的调用构造函数】
不能将虚函数说明为全局函数,也不能说明为static静态成员函数。因为虚函数的动态绑定必须在类的层次依靠this指针实现。
再添加一点:
虚函数的重载特性:一个派生类中定义基类的虚函数是函数重载的一种特殊形式。
重载一般的函数:函数的返回类型和参数的个数、类型可以不同,仅要求函数名相同;
而重载虚函数:要求函数名、返回类型、参数个数、参数类型和顺序都完全相同。

纯虚函数:是在基类中说明的虚函数,它在基类中没有是在定义,要求所有派生类都必须定义自己的版本。
纯虚函数的定义形式:virtual 类型 函数名(参数表)=0,该函数赋值为0,表示没有实现定义。在基类中定义为0,在派生类中实现各自的版本。

纯虚函数与抽象类的关系:
抽象类中至少有一个纯虚函数。
如果抽象类中的派生类没有为基类的纯虚函数定义实现版本,那么它仍然是抽象类,相反,定义了纯虚函数的实现版本的派生类称为具体类。
抽象类在C++中有以下特点:
  1. 抽象类只能作为其他类的基类;
  2. 抽象类不能建立对象;
  3. 抽象类不能用作参数类型、参数返回类型或显示类型转换。
发表于 2016-09-13 18:07:38 回复(2)
D
发表于 2015-09-15 00:23:39 回复(0)
在派生类中重新定义该虚函数时,关键字virtual可以写也可以不写。
一个虚函数无论被公有继承多少次,它仍然保持其虚函数的特性。
虚函数必须是其所在类的成员函数,而不能是友元函数,也不能是静态成员函数(static)

发表于 2015-09-14 08:42:50 回复(0)
(1) 与基类的虚函数有相同的参数个数;  (2) 其参数的类型与基类的虚函数的对应参数类型相同;  (3) 其返回值或者与基类虚函数的相同,或者都返回指针或引用,并且派生类虚函数所返回的指针或引用 的基类型, 是基类中被替换的虚函数所返回的指针或引用的基类型的子类型
发表于 2016-10-12 00:43:26 回复(0)
详见primer p537
发表于 2015-11-12 22:23:52 回复(0)