Parte de la razón por la que C++ ha tenido tanto éxito es que la meta no era solamente convertir C en un lenguaje de POO (aunque comenzó de ese modo), sino también resolver muchos otros problemas a los que se enfrentan los desarrolladores de hoy en día, especialmente aquellos que tienen grandes inversiones en C. Tradicionalmente, los lenguajes de POO han sufrido de la postura de que debería abandonar todo lo que sabe y empezar desde cero, con un nuevo conjunto de conceptos y una nueva sintaxis, argumentando que a largo plazo es mejor deshacerse de todo el viejo equipaje que viene con los lenguajes procedurales. Puede ser cierto, a largo plazo. Pero a corto plazo, mucho de este equipaje era valioso. Los elementos más valiosos podían no estar en el código base existente (el cual, con las herramientas adecuadas, se podría traducir), sino en el conocimiento adquirido. Si usted es un programador C y tiene que tirar todo lo que sabe sobre C para adoptar un nuevo lenguaje, inmediatamente será mucho menos productivo durante muchos meses, hasta que su mente se ajuste al nuevo paradigma. Mientras que si puede apoyarse en su conocimiento actual de C y ampliarlo, puede continuar siendo productivo con lo que ya sabe mientras se pasa al mundo de la programación orientada a objetos. Como todo el mundo tiene su propio modelo mental de la programación, este cambio ya es bastante complicado de por sí sin el coste añadido de empezar desde cero con un nuevo modelo de lenguaje. Por eso, la razón del éxito de C++, en dos palabras: es económico. Sigue costando cambiarse a la POO, pero con C++ puede costar menos [31].
La meta de C++ es mejorar la productividad. Ésta viene por muchos caminos, pero el lenguaje está diseñado para ayudarle todo lo posible, y al mismo tiempo dificultarle lo menos posible con reglas arbitrarias o con la exigencia de usar un conjunto particular de características. C++ está diseñado para ser práctico; las decisiones de diseño del lenguaje C++ estaban basadas en proveer los beneficios máximos al programador (por lo menos, desde la visión del mundo de C).
Se obtiene una mejora inmediata incluso si continúa escribiendo código C porque C++ ha cerrado muchos agujeros en el lenguaje C y ofrece mejor control de tipos y análisis en tiempo de compilación. Está obligado a declarar funciones de modo que el compilador pueda controlar su uso. La necesidad del preprocesador ha sido prácticamente eliminada para sustitución de valores y macros, lo que elimina un conjunto de errores difíciles de encontrar. C++ tiene una característica llamada referencias que permite un manejo más conveniente de direcciones para argumentos de funciones y retorno de valores. El manejo de nombres se mejora a través de una característica llamada sobrecarga de funciones, que le permite usar el mismo nombre para diferentes funciones. Una característica llamada espacios de nombres (namespaces) también mejora el control de los nombres. Hay muchas otras características menores que mejoran la seguridad de C.
[31] Digo «puede» porque, debido a la complejidad de C++, realmente podría ser más económico cambiarse a Java. Pero la decisión de qué lenguaje elegir tiene muchos factores, y en este libro asumiré que el lector ha elegido C++.