21xrx.com
2024-12-22 20:14:07 Sunday
登录
文章检索 我的文章 写文章
C++中重写和覆盖的区别
2023-07-09 10:12:03 深夜i     --     --
C++ 重写 覆盖 区别

在C++编程语言中,有两个特性常常会被初学者所混淆,那就是“重写”和“覆盖”。这两个特性的确相似,因为它们都涉及到对基类中的成员函数进行修改和重新定义,但又存在明显的区别。

首先,什么是“重写”?顾名思义,重写就是在派生类中重新定义一个与基类中已有的成员函数同名的函数。这个新函数具有与原函数相同的名称、参数列表和返回类型,但实现代码可以完全不同。当通过一个基类指针或引用调用这个函数时,实际上是调用了派生类中定义的这个函数,而不是原本的那个函数。这种行为称作“动态绑定”,因为真正要调用的函数是在运行时才能确定。

另一方面,“覆盖”是指在派生类中重新定义一个基类中的虚函数(virtual function)。虚函数是一种特殊的成员函数,在基类中定义为虚函数时,可以使派生类根据需要对其重新定义。在派生类中重新定义的虚函数必须有相同的函数签名(名称、参数列表和返回类型),并且使用override关键字来表示对基类函数的覆盖。当通过一个包含派生类对象的指针或引用,调用基类中的这个虚函数时,实际上是调用派生类中重写的版本,不需要使用动态绑定。

总的来说,“重写”适用于非虚函数的重定义,是一种非侵入式的方式扩展基类功能,用于派生类与基类之间的多态,而“覆盖”则是对虚函数的重定义,提供了一种灵活、可定制的扩展基类功能的方法,并便于类的层次结构的维护编辑。要想使用得当,了解它们之间的区别至关重要。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复