转自:https://stackoverflow.com/questions/18198314/what-is-the-override-keyword-in-c-used-for
转自:https://msdn.microsoft.com/en-us/library/jj678987.aspx
The override keyword serves two purposes:
-
It shows the reader of the code that "this is a virtual method, that is overriding a virtual method of the base class."
-
The compiler also knows that it's an override, so it can "check" that you are not altering/adding new methods that you think are overrides.
To explain the latter:
class base
{
public:
virtual int foo(float x) = 0;
};
class derived: public base
{
public:
int foo(float x) override { ... do stuff with x and such ... }
}
class derived2: public base
{
public:
int foo(int x) override { ... } //complie error!! 使用override 后的函数形式必须与base类相同
};
Another Example
Use override to help prevent inadvertent inheritance behavior in your code. The following example shows where, without using override, the member function behavior of the derived class may not have been intended. The compiler doesn't emit any errors for this code.
class BaseClass
{
virtual void funcA();
virtual void funcB() const;
virtual void funcC(int = 0);
void funcD();
};
class DerivedClass: public BaseClass
{
virtual void funcA(); // ok, works as intended
virtual void funcB(); // DerivedClass::funcB() is non-const, so it does not
// override BaseClass::funcB() const and it is a new member function
virtual void funcC(double = 0.0); // DerivedClass::funcC(double) has a different
// parameter type than BaseClass::funcC(int), so
// DerivedClass::funcC(double) is a new member function
};
When you use override, the compiler generates errors instead of silently creating new member functions.
class BaseClass
{
virtual void funcA();
virtual void funcB() const;
virtual void funcC(int = 0);
void funcD();
};
class DerivedClass: public BaseClass
{
virtual void funcA() override; // ok
virtual void funcB() override; // compiler error: DerivedClass::funcB() does not
// override BaseClass::funcB() const
virtual void funcC( double = 0.0 ) override; // compiler error:
// DerivedClass::funcC(double) does not
// override BaseClass::funcC(int)
void funcD() override; // compiler error: DerivedClass::funcD() does not
// override the non-virtual BaseClass::funcD()
};
本文详细解释了C++中override关键字的作用及用法。通过示例说明如何正确使用该关键字来实现基类虚拟方法的覆盖,并展示了不当使用时可能出现的问题。
1106

被折叠的 条评论
为什么被折叠?



