# C++ 函数覆盖

> 原文： [https://beginnersbook.com/2017/09/cpp-function-overriding/](https://beginnersbook.com/2017/09/cpp-function-overriding/)

函数覆盖允许我们在子类中具有已存在于父类中的相同函数。子类继承父类的数据成员和成员函数，但是当您想要覆盖覆盖中的函数时，您可以使用函数覆盖。这就像在子类中创建旧函数的新版本一样。

## 函数覆盖示例

要覆盖函数，您必须在子类中具有相同的签名。签名是指数据类型和参数序列。这里我们在父函数中没有任何参数，所以我们没有在子函数中使用任何参数。

```cpp
#include <iostream>
using namespace std;
class BaseClass {
public:
   void disp(){
      cout<<"Function of Parent Class";
   }
};
class DerivedClass: public BaseClass{
public:
   void disp() {
      cout<<"Function of Child Class";
   }
};
int main() {
   DerivedClass obj = DerivedClass();
   obj.disp();
   return 0;
}
```

输出：

```cpp
Function of Child Class
```

> **注意：**在函数覆盖中，父类中的函数被称为被覆盖函数，子类中的函数称为覆盖函数。

## 如何从子类调用被覆盖函数

正如我们在上面看到的那样，当我们调用函数（涉及覆盖）时，会调用子类函数（覆盖函数）。如果要通过使用子类的对象来调用被覆盖的函数，该怎么办？您可以通过创建子类对象，并使父类的引用指向它来实现。让我们举个例子来理解它。

```cpp
#include <iostream>
using namespace std;
class BaseClass {
public:
   void disp(){
      cout<<"Function of Parent Class";
   }
};
class DerivedClass: public BaseClass{
public:
   void disp() {
      cout<<"Function of Child Class";
   }
};
int main() {
   /* Reference of base class pointing to
    * the object of child class.
    */
   BaseClass obj = DerivedClass(); 
   obj.disp();
   return 0;
}
```

输出：

```cpp
Function of Parent Class
```

如果你想从覆盖函数调用被覆盖的函数，那么你可以这样做：

```cpp
parent_class_name::function_name
```

要在上面的例子中执行此操作，我们可以在子类的`disp()`函数中编写以下语句：

```cpp
BaseClass::disp();
```