Что преимуществом создания является закрытый метод, виртуальный в C++?
Я заметил это в проекте C++ с открытым исходным кодом:
class HTMLDocument : public Document, public CachedResourceClient {
private:
virtual bool childAllowed(Node*);
virtual PassRefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&);
};
Херб Саттер очень красиво объяснил это здесь .
Руководство № 2: Предпочитайте делать виртуальные функции частным.
Это позволяет полученным классам переопределять функцию, чтобы настроить поведение по мере необходимости, без дальнейшего раскрытия виртуальных функций непосредственно заставляя их Callable по полученным классам (как было бы возможно, если функции были только защищены). Дело в том, что виртуальные функции существуют, чтобы разрешить настройку; Если они также не должны быть связаны непосредственно из-за полученных классов, нет необходимости делать их что-либо, кроме частного
Если метод виртуальный, его можно переопределить производными классами, даже если он является частным. При вызове виртуального метода будет вызвана переопределенная версия.
(В отличие от Херба Саттера, цитируемого Прасуном Сауравом в его ответе, C++ FAQ Lite рекомендует против частных виртуалов, в основном потому, что часто сбивает с толку людей.)
.