Частный виртуальный метод в C++

Что преимуществом создания является закрытый метод, виртуальный в C++?

Я заметил это в проекте C++ с открытым исходным кодом:

class HTMLDocument : public Document, public CachedResourceClient {
private:
    virtual bool childAllowed(Node*);
    virtual PassRefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&);
};
118
задан silverburgh 31 January 2010 в 06:28
поделиться

2 ответа

Херб Саттер очень красиво объяснил это здесь .

Руководство № 2: Предпочитайте делать виртуальные функции частным.

Это позволяет полученным классам переопределять функцию, чтобы настроить поведение по мере необходимости, без дальнейшего раскрытия виртуальных функций непосредственно заставляя их Callable по полученным классам (как было бы возможно, если функции были только защищены). Дело в том, что виртуальные функции существуют, чтобы разрешить настройку; Если они также не должны быть связаны непосредственно из-за полученных классов, нет необходимости делать их что-либо, кроме частного

112
ответ дан 24 November 2019 в 01:58
поделиться

Если метод виртуальный, его можно переопределить производными классами, даже если он является частным. При вызове виртуального метода будет вызвана переопределенная версия.

(В отличие от Херба Саттера, цитируемого Прасуном Сауравом в его ответе, C++ FAQ Lite рекомендует против частных виртуалов, в основном потому, что часто сбивает с толку людей.)

.
63
ответ дан 24 November 2019 в 01:58
поделиться
Другие вопросы по тегам:

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