The problem that built C++ (a thesis)
At least at one point, there were a lot of people who loudly couldn't understand why C++ was still around as a going concern. After all, didn't Java have it beat hollow, as Java was a much more productive object oriented language to develop in?
Such people implicitly believe that that problem that built C++ is 'building object oriented programs'; now that there was a well known better solution to that problem, they couldn't see why C++ didn't wither away. But they're wrong.
My thesis is that the problem that built C++ is actually 'we want to build big software projects in a language with predictable, fast native code'. It turns out that there are an important class of programs for which you want these attributes; if nothing else, you need to build the basic blocks of your JVM or your CLR out of something.
While C is a language with predictable fast native code, it is not entirely suitable for big projects because the complexity explodes unless you do something. Objects are a good way of containing the complexity of a big project (partly by reducing connections), and C++ gives them to you while C forces you to build them by hand.
(This is not to say that C++ was never used as a general object oriented programming language; it was, when better languages weren't available. When they became available, C++ started being driven out of that job and back into its core line of work.)