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