c++ D16

重载,重定义,隐藏

重载:在同一个作用域中,函数名字相同,函数的参数列表不一样(参数的个数,参数的类型,参数的顺序),注意:没有考虑返回类型

重定义(重写,覆盖):发生在基类与派生类中,同名的虚函数,并且参数列表也要一样,返回类型也要一样。

隐藏:发生在基类与派生类中,派生类中的函数与基类中的函数名字相同。派生类的数据成员也可以隐藏基类中的同名数据成员(总结:可能发生的是数据成员,也可能是成员函数 )

在cpp中,虚函数是被隐藏还是被重写如何判别:
在C++中,如果一个子类定义了与其父类中虚函数具有相同的名称、参数列表和返回类型的函数,那么这个函数会重写(override)父类中的虚函数。如果子类定义了一个新的函数与其父类中的虚函数名称相同但参数列表或返回类型不同,那么该函数会隐藏(hide)父类中的虚函数。

可以通过以下方法来判断子类中的函数是被重写还是被隐藏:

如果在父类中使用关键字 virtual 声明了一个函数,并且子类中定义了与该函数相同的函数,则该函数会被重写,无论是否使用关键字 virtual。也就是说,子类中不需要再次声明该函数为虚函数。

如果在父类中没有使用关键字 virtual 声明一个函数,那么在子类中定义一个与该函数名称相同的函数,该函数会隐藏父类中的同名函数。此时,子类中定义的函数必须使用关键字 virtual 来声明为虚函数,才能被子类的对象多态调用。

总之,重写和隐藏的区别在于,重写是在子类中重新实现了父类中已有的虚函数,而隐藏是在子类中定义了一个新的函数,与父类中的虚函数同名但参数列表或返回类型不同。

关于纯虚函数和抽象类的描述中,错误的是( )。

A
纯虚函数是一种特殊的虚函数,它没有具体的实现
B
抽象类是指具有纯虚函数的类
C
一个基类中声明有纯虚函数,该基类派生类一定不再是抽象类
D
抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出

选项C是错误的。一个基类中声明有纯虚函数,该基类的派生类不一定不再是抽象类。当派生类未实现基类中的所有纯虚函数时,它仍然是抽象类。只有当派生类实现了基类中所有纯虚函数时,它才不再是抽象类。因此,选项C是错误的描述。

重载(overload)是指在同一个作用域中,可以定义多个同名函数,但是它们的参数列表必须不同。通过重载,可以在不改变函数名的前提下,使用不同的参数类型和个数来区分函数,以方便编程。

隐藏(hide)是指在派生类中,如果定义了一个与基类同名的成员函数,则该成员函数会隐藏基类的同名成员函数。当使用基类指针或引用调用同名函数时,会调用基类的同名函数,而不是派生类的同名函数。如果想要在派生类中调用基类的同名函数,可以使用作用域解析运算符“::”来显式调用。

覆盖(override)是指在派生类中,重新定义一个与基类同名、参数列表和返回值类型都相同的虚函数,以改变其行为。在使用基类指针或引用调用同名虚函数时,会根据实际类型调用派生类的同名虚函数,实现多态性。

重载、隐藏和覆盖都是 C++ 中的函数重定义机制,它们之间的区别主要在于:重载是指在同一个作用域中,使用不同的参数类型和个数来定义同名函数,实现函数的多态性。隐藏是指派生类中的同名函数隐藏基类中的同名函数,使用基类指针或引用调用同名函数时,会调用基类中的同名函数。覆盖是指在派生类中重新定义一个与基类同名、参数列表和返回值类型都相同的虚函数,实现多态性。

void (*pFunc)(void);   //是一个指针
pFunc=test2;   //直接把test2的地址给pFunc
typedef void (*pFunc)(void);   //是一个类型
pFunc c =test2;   //需要创建一个对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值