将virtual
关键字放在派生类的头文件中是最佳做法吗?
以下是一个例子:
class A
{
public:
virtual void Func();
};
你会得到这样的B类:
class B : public A
{
public:
virtual void Func();
};
或者这个:
class B : public A
{
public:
void Func();
};
答案 0 :(得分:3)
最佳做法是在C ++ 11中使用覆盖说明符:http://en.cppreference.com/w/cpp/language/override(在早期版本的Visual C ++中也作为Microsoft扩展)。
如果覆盖存在,那么虚拟是多余的,如上面的链接示例所示。
答案 1 :(得分:3)
是的,显性通常被认为是最佳做法。如果函数可以是覆盖,那么该语言会指定隐式添加virtual
说明符,但这是“偷偷摸摸”。
C ++ 11还添加了override
和final
限定符,因此您可以确保扩展基础,而不是定义一个全新的函数。
这些限定符需要虚函数。它们并不意味着virtual
,但隐含的virtual
必须存在。但同样,明确是最好的政策。
答案 2 :(得分:0)
一般来说,最好尽可能明确。如果要覆盖派生类中的函数,则应指定它。如果您不打算再次覆盖该函数,请将其设置为final。声明是您与班级用户的合同。如果你说清楚(但仍然简洁),它将不太可能被错误地使用。