Chapter 4 - Designs and Declarations
Last updated
Last updated
Software designs — approaches to getting the software to do what you want it to do — typically begin as fairly general ideas, but they eventually become detailed enough to allow for the development of specific interfaces. These interfaces must then be translated into C++ declarations. In this chapter, we attack the problem of designing and declaring good C++ interfaces. We begin with perhaps the most important guideline about designing interfaces of any kind: that they should be easy to use correctly and hard to use incorrectly. That sets the stage for a number of more specific guidelines addressing a wide range of topics, including correctness, efficiency, encapsulation, maintainability, extensibility, and conformance to convention.
The material that follows isn’t everything you need to know about good interface design, but it highlights some of the most important considerations, warns about some of the most frequent errors, and provides solutions to problems often encountered by class, function, and template designers.
Make interfaces easy to use correctly and hard to use incorrectly.
Treat class design as type design.
Prefer pass-by-reference-to-const to pass-by-value.
Don't try to return a reference when you must return an object.
Declare data members private.
Prefer non-member non-friend functions to member functions.
Declare non-member functions when type conversions should apply to all parameters.
Consider support for a non-throwing swap.