October 2004
Intermediate to advanced
240 pages
6h 22m
English
In base classes with a high cost of change (particularly ones in libraries and frameworks): Prefer to make public functions nonvirtual. Prefer to make virtual functions private, or protected if derived classes need to be able to call the base versions. (Note that this advice does not apply to destructors; see Item 50.)
Most of us have learned through bitter experience to make class members private by default unless we really need to expose them. That’s just good encapsulation. This wisdom is applied most frequently to data members (see Item 41), but it applies equally to all members, including virtual functions.
Particularly in OO hierarchies ...