首页 > 试题广场 >

当一个类的某个函数被说明为virtual,在该类的所有派生类

[单选题]
当一个类的某个函数被说明为virtual,则在该类的所有派生类中的同原型函数_____?
  • 只有 被重新说明时才识虚函数
  • 只有被重新说明为virtual时才是虚函数
  • 都不是虚函数
  • 都是虚函数
其实吧,这题可以联想到重载,覆盖,隐藏的区别。

a.成员函数被重载的特征:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

(4)virtual 关键字可有可无。

b.覆盖是指派生类函数覆盖基类函数,特征是:

(1)不同的范围(分别位于派生类与基类);

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual 关键字。

c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

发表于 2016-09-23 17:16:51 回复(0)
类的成员函数 设为virtual,其派生类 的相应的函数也会自动变为虚函数
发表于 2015-09-14 18:52:39 回复(0)
《C++ Primer》第五版,P537 页:“当我面在派生类中覆盖某个虚函数时,可以再一次使用virtual关键字指出该函数的性质。然而这么做并非必须,因为一旦某个函数被声明为虚函数,则在所有派生类中它都是虚函数”
发表于 2017-04-22 12:26:31 回复(0)

a.成员函数被重载的特征:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

(4)virtual 关键字可有可无。

b.覆盖是指派生类函数覆盖基类函数,特征是:

(1)不同的范围(分别位于派生类与基类);

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual 关键字。

c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)


编辑于 2018-12-06 14:05:34 回复(0)
背书 《C++ Primer》第五版,P537 页:“当我面在派生类中覆盖某个虚函数时,可以再一次使用virtual关键字指出该函数的性质。然而这么做并非必须,因为一旦某个函数被声明为虚函数,则在所有派生类中它都是虚函数”
发表于 2021-10-19 21:14:01 回复(0)

a.成员函数被重载的特征:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

(4)virtual 关键字可有可无。

b.覆盖是指派生类函数覆盖基类函数,特征是:

(1)不同的范围(分别位于派生类与基类);

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual 关键字。

c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

发表于 2016-10-25 21:29:04 回复(2)
父类的所有子类中,同名函数都是虚函数。
发表于 2016-04-27 13:49:19 回复(0)
C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。
发表于 2021-04-22 09:36:44 回复(0)
基类的成员函数 设为virtual,其派生类 的相应的函数也会自动变为虚函数
发表于 2019-03-28 19:49:33 回复(0)


个人总结,理解起来比较容易
发表于 2018-09-22 09:20:44 回复(0)
D
发表于 2015-09-15 00:20:09 回复(0)