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