Как переопределить виртуальную функцию в хорошем стиле? [C++]

парни я знаю этот вопрос, являются очень простыми, но я встретил в немногих публикациях (веб-сайты, книги) другой стиль виртуальной функции переопределения. То, что я имею в виду: если у меня есть базовый класс:

class Base
{
public:
virtual void f() = 0;
};

в некоторых публикациях я видел, что для переопределения этого некоторые авторы просто скажут:

void f();     

и некоторые все еще повторили бы виртуальное ключевое слово прежде пусто. Какая форма перезаписи находится в хорошем стиле? Спасибо за Ваши ответы.

8
задан Andrew Medico 25 April 2010 в 23:40
поделиться

3 ответа

Это чисто дело вкуса. Можно привести некоторые слабые аргументы в пользу ценности одних стилей для самодокументирования по сравнению с отсутствием избыточности других.

14
ответ дан 5 December 2019 в 10:02
поделиться

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

Однако рекомендуется повторять ключевое слово virtual, поскольку оно документирует, какие производные функции являются виртуальными в базовом классе.

Это также рекомендуется в «Стандартном руководстве по высоконадежному кодированию C ++» .

, ссылка на которую содержится в FAQ по C ++ .

3
ответ дан 5 December 2019 в 10:02
поделиться

Лично я использую оба стиля: виртуальный означает, что метод можно переопределить.

Итак, у нас есть два случая:

  • если вы хотите, чтобы пользователь вашего класса знал, что метод может быть переопределен, используйте ключевое слово virtual
  • , если вы предпочитаете скрыть этот факт. (поскольку вы предоставляете новые методы, например, следуя шаблону Template Pattern ), то не используйте ключевое слово virtual

Я думаю, это еще один способ (ab?) использования ключевого слова .

0
ответ дан 5 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: