在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