这基本上是一个最佳实践问题,以及关于override
的预期用法的问题:
struct A
{
virtual void func();
};
struct B : public A
{
virtual void func() override;
};
在上述情况下,使用override
似乎完全合理。它告诉用户B
func
覆盖A
中的虚函数(只能通过C ++ 11之前的注释传达的信息)。但是当用户不应该认为A
是基类时...就像A
private
被继承的那样:
struct B : private A
{
virtual void func() override;
};
在这种情况下,我告诉用户B
关于他们不应该知道的内部实现细节。如果override
的目的是给B
的作者一个错误,如果他实际上没有覆盖任何东西,那就没问题;但是,如果目的是向用户传达更多信息,那么在这种情况下我不写override
吗?
答案 0 :(得分:2)
“覆盖”就在那里,所以类的实现者可以说“这个方法应该覆盖我的基类中的一个”。如果他这样做,那么如果该方法实际上没有覆盖基类方法,则编译器将提供错误 - 如果您输入错误名称,或者基类稍后更改,则会发生这种情况。
编辑:因此,它是一个有助于编写正确代码的工具;它并不意味着是某种文档关键字。