0

virtual将关键字放在派生类的头文件中是最佳实践吗?

这是一个例子:

class A
{
public:
    virtual void Func();
};

你会这样派生B类:

class B : public A
{
public:
    virtual void Func();
};

或这个:

class B : public A
{
public:
    void Func();
};
4

3 回答 3

3

最佳实践是在 C++11 中使用覆盖说明符:http ://en.cppreference.com/w/cpp/language/override (也在早期版本的 Visual C++ 中作为 Microsoft 扩展)。

如果存在覆盖,则虚拟是多余的,如上面链接的示例所示。

于 2013-11-07T00:50:18.520 回答
3

是的,明确性通常被认为是最佳实践。virtual如果函数可以被覆盖,该语言确实指定隐式添加说明符,但这是“偷偷摸摸的”。

C++11 还添加了overrideandfinal限定符,因此您可以确保扩展基础,而不是定义全新的函数。

这些限定符需要一个虚函数。它们并不暗示virtual,但隐含virtual的东西必须存在。但同样,明确是最好的策略。

于 2013-11-07T00:50:38.683 回答
0

一般来说,最好尽可能明确。如果要覆盖派生类中的函数,则应指定它。如果您不打算再次覆盖该函数,请将其设为 final。声明是您与该类用户的合同。如果你说得清楚(但仍然简洁),它就不太可能被错误地使用。

于 2013-11-07T00:51:51.437 回答