Speaking C++ as a Native
C++ supports several styles (multiple paradigms, if you must). This allows great flexibility, notational convenience, maintainability, and close-to-optimal performance. Programmers who don't know the basic naitve C++ styles and techniques "speak" C++ with a thick accent, limiting themselves to relatively restrictive pidgin dialects.
Here, I'll present language features such as classes, class hierarchies, abstract classes, and templates together with the fundamental programming styles they support. In particular, I'll show how to provide generic algorithms, function objects, access objects, and delayed evaluation as needed to build and use flexible and efficient libraries. My aim is to give an idea of what's possible to provide, and some understanding of the fundamental techniques of modern C++ libraries.