C++ 成员函数重写

2025 年 8 月 29 日 | 阅读 4 分钟

在面向对象编程中,继承是最强大的概念之一。它使一个类能够继承另一个类的特性和行为。重写是 C++ 编程中用于在派生类中修改继承成员函数行为的技术。在本文中,我们将详细了解 C++ 中重写成员函数的概念。

什么是重写成员函数?

在 C++ 中,当一个派生类从其基类继承一个成员函数时,它可以在派生类中重新定义该函数的行为。这种在派生类中重新定义基类成员函数的过程称为“重写”,而重新定义的函数被称为“被重写成员函数”。

换句话说,当一个派生类定义了一个与基类中成员函数同名同签名的成员函数时,派生类的函数将重写基类的函数。

如何在 C++ 中重写成员函数?

要在 C++ 中重写成员函数,我们需要遵循以下步骤:

步骤 1:定义一个带有虚函数的基类

虚函数 是一种在基类中用关键字“Virtual”声明的成员函数。这表示该函数可以在派生类中被重写。声明虚函数的语法如下:

C++ 代码

步骤 2:定义一个重写虚函数的派生类

要重写虚函数,我们需要定义一个继承自基类的派生类,并提供虚函数的新实现。定义重写虚函数的派生类的语法如下:

C++ 代码

步骤 3:创建派生类对象并调用虚函数

我们可以创建派生类的对象,并使用指向基类的指针调用虚函数。创建派生类对象并调用虚函数的语法如下:

C++ 代码

当我们使用指向基类的指针调用虚函数时,将调用派生类中虚函数的实现。

示例

让我们看一个演示 C++ 中重写成员函数概念的示例。在上面的示例中,我们有一个名为 的基类或父类,它有一个虚函数。我们还有两个派生类,名为 Circle 和 Square,它们重写了 draw() 函数以提供自己的实现。

C++ 代码

输出

Drawing a circle
Drawing a square

在此示例中,我们创建了 CircleSquare 类的对象,并使用指向基类 Shape 的指针调用 draw() 函数。由于 draw() 函数是虚函数,因此调用了派生类中的实现,我们得到输出“Drawing a circle”(绘制圆形)和“Drawing a square”(绘制正方形)。

重写成员函数的优点

多态

重写的主要优点之一是它支持多态性。多态性允许派生类根据其使用的上下文具有多种行为。

代码重用性

重写允许重用基类中的代码,同时允许派生类修改基类成员函数的行为。

模块化

重写使代码更容易维护,因为在派生类中所做的更改不会影响基类。

重写成员函数的规则

  • 派生类中被重写的函数必须与基类函数具有相同的名称和参数。
  • 被重写的函数必须与基类函数具有相同的返回类型或协变返回类型。
  • 派生类中被重写的函数的访问级别不能比基类函数的访问级别更严格。
  • 在基类函数声明中必须使用 Virtual 关键字。
  • 基类中的函数必须声明为与派生类相同或更高的访问级别。