在C ++ 11中,覆盖和最终关键字只能在声明中使用而不能在定义中使用吗?

时间:2017-10-31 11:07:09

标签: c++11

似乎overridefinal说明符可以在声明和定义中使用。是否可以仅在声明级别使用它们?

1 个答案:

答案 0 :(得分:1)

如果定义在类定义中,overridefinal说明符只能出现在成员定义中。

E.g

struct Base { virtual void foo() = 0 }
struct Derived : public Base { void foo() override { std::cout << "foo"; } // OK
struct Derived : public Base { void foo() override; }
void Derived::foo() override { std::cout << "foo"; } // Error!
// ^^ Definition outside class. ^^

换句话说,如果将成员函数的定义放在类定义之外,那么overridefinal说明符应仅存在于类定义中的声明。

http://en.cppreference.com/w/cpp/language/final