C++ 中的 override 关键字


函数重写是 C++ 中最常见的特性。函数重写基本意味着重新定义基类中的函数,同时也在派生类中定义。因此,函数签名相同,但行为将不同。

但在重写该函数时,程序员可能会出现错误。例如,如果签名不相同,它将被视为另一个函数,而不是重写的方法或该函数。在这种情况下,我们可以使用 override 关键字。此关键字在 C+ +11 中引入。当编译器找到此类关键字时,它会理解这是同一类的重写版本。

我们来看一个示例来理解这个概念。

示例

#include <iostream>
using namespace std;
class BaseClass{
   public:
      virtual void display() {
         cout << "Displaying from Base Class\n";
      }
};
class DerivedClass : public BaseClass{
   public:
      void display() {
         cout << "Displaying from Derived Class\n";
      }
};
main() {
   BaseClass *b_ptr;
   b_ptr = new DerivedClass();
   b_ptr->display();
}

输出

Displaying from Derived Class

在这种情况下,由于签名相同,程序运行良好。在下面的示例中,签名将不同。对于 override 关键字,它将生成错误。

示例

#include <iostream>
using namespace std;
class BaseClass{
   public:
      virtual void display() {
         cout << "Displaying from Base Class\n";
      }
};
class DerivedClass : public BaseClass{
   public:
      void display(int x) override{
         cout << "Displaying from Derived Class\n";
      }
};
main() {
   BaseClass *b_ptr;
   b_ptr = new DerivedClass();
   b_ptr->display();
}

输出

[Error] 'void DerivedClass::display(int)' marked override, but does not override

在本例中,程序可以正常工作,因为签名相同。在以下示例中,签名将不同。对于 override 关键字,它将生成错误。

更新于: 2019-07-30

4K+ 次浏览

开启您的 职业生涯

完成课程即可获得认证

开始
广告