最佳实践虚拟

时间:2013-11-07 00:47:36

标签: c++

virtual关键字放在派生类的头文件中是最佳做法吗?

以下是一个例子:

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

你会得到这样的B类:

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

或者这个:

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

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

这些限定符需要虚函数。它们并不意味着virtual,但隐含的virtual必须存在。但同样,明确是最好的政策。

答案 2 :(得分:0)

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