在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关键字,它将生成错误。

以上是 在C ++中覆盖关键字 的全部内容, 来源链接: utcz.com/z/343383.html

回到顶部