Part of the reason
C++ has been so successful is that the goal was not just
to turn C into an OOP language (although it started that way), but also to solve
many other problems facing developers today, especially those who have large
investments in C. Traditionally, OOP languages have suffered from the attitude
that you should abandon everything you know and start from scratch with a new
set of concepts and a new syntax, arguing that it’s better in the long run
to lose all the old baggage that comes with procedural languages. This may be
true, in the long run. But in the short run, a lot of that baggage was valuable.
The most valuable elements may not be the existing code base (which, given
adequate tools, could be translated), but instead the existing mind base.
If you’re a functioning C programmer and must drop everything you know
about C in order to adopt a new language, you immediately become much less
productive for many months, until your mind fits around the new paradigm.
Whereas if you can leverage off of your existing C knowledge and expand on it,
you can continue to be productive with what you already know while moving into
the world of object-oriented programming. As everyone has his or her own mental
model of programming, this move is messy enough as it is without the added
expense of starting with a new language model from square one. So the reason for
the success of C++, in a nutshell, is economic: It still costs to move to OOP,
but C++ may cost
less[21].
The goal of C++ is improved productivity.
This productivity comes in many ways, but the language is designed to aid you as
much as possible, while hindering you as little as possible with arbitrary rules
or any requirement that you use a particular set of features. C++ is designed to
be practical; C++ language design decisions were based on providing the maximum
benefits to the programmer (at least, from the world view of
C).