是覆盖类的用户还是实现者?

时间:2012-07-08 20:00:19

标签: c++ c++11 override

这基本上是一个最佳实践问题,以及关于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吗?

1 个答案:

答案 0 :(得分:2)

“覆盖”就在那里,所以类的实现者可以说“这个方法应该覆盖我的基类中的一个”。如果他这样做,那么如果该方法实际上没有覆盖基类方法,则编译器将提供错误 - 如果您输入错误名称,或者基类稍后更改,则会发生这种情况。

编辑:因此,它是一个有助于编写正确代码的工具;它并不意味着是某种文档关键字。