在C++中,override
关键字用于显式地指示一个成员函数应该重写基类中的虚函数。如果一个成员函数被标记为override
,但它并没有重写基类中的任何虚函数,编译器会报错,提示“标记为‘override’,但不覆盖”。
使用override
关键字的优势在于:
override
关键字只能用于成员函数,并且该成员函数必须是重写基类中的虚函数。
在多态编程中,当你需要重写基类的虚函数时,使用override
关键字可以明确表示你的意图,并且帮助编译器进行类型检查。
public
,而子类中重写的函数是private
或protected
。override
。#include <iostream>
class Base {
public:
virtual void foo() {
std::cout << "Base::foo()" << std::endl;
}
};
class Derived : public Base {
public:
void foo() override { // 正确重写
std::cout << "Derived::foo()" << std::endl;
}
};
class DerivedWrong : public Base {
public:
void fooo() override { // 错误:拼写错误
std::cout << "DerivedWrong::fooo()" << std::endl;
}
};
int main() {
Base* b = new Derived();
b->foo(); // 输出: Derived::foo()
Base* bw = new DerivedWrong();
bw->foo(); // 输出: Base::foo()
delete b;
delete bw;
return 0;
}
通过以上解释和示例代码,你应该能够理解并解决“标记为‘override’,但不覆盖”错误。
领取专属 10元无门槛券
手把手带您无忧上云