Сделать виртуализацию виртуальной? - PullRequest
4 голосов
/ 12 июня 2011

При реализации чисто виртуальной функции в C ++ существует ли рекомендация, согласно которой реализацию также следует сделать виртуальной?Каково обоснование?

class Interface
{
  public:
    virtual void foobar() = 0;
};

class Concrete
    : public Interface
{
  public:
    virtual void foobar();
};

Ответы [ 2 ]

13 голосов
/ 12 июня 2011

Неважно.

void foobar() в Concrete равно virtual независимо от того, объявляете ли вы его как таковой, и оно переопределяет void foobar() в Interface.

7 голосов
/ 12 июня 2011

Несмотря на то, что не имеет значения, присутствует ли ключевое слово virtual в производном классе или нет, я обнаружил, что это незаменимая практика самодокументирования, позволяющая сэкономить время, чтобы всегда включал его так что любой, кто работает с вашим кодом через два года, сразу же увидит, что в классе есть нечто большее, чем то, что сразу бросается в глаза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...