In the context of the rest of the Nobody Understands C++ series, I feel like this one is redundant. But it seems like it needs to be said. C++ is not an object oriented programming language. C++ is a multi-paradigm language that supports most of the major programming paradigms that have been widely accepted. Specifically, C++ supports:

Making the most of C++ means effectively utilizing each of these paradigms appropriately. Indeed, the boost::function library (part of the upcoming C++0x standard) must utilize procedural, object oriented and generic programming techniques to make the implementation possible. And it is through boost::function that the primary, easiest method of functional programming is possible in C++. Understanding the strengths and weaknesses of these individual paradigms and their use in C++ will make you a better programming in the other languages that you use.