在C ++中覆盖关键字

函数覆盖是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关键字,它将生成错误。