C ++ se inventó para gestionar la complejidad que C no podía manejar. Por ejemplo, un problema común con C era que podía "quedarse sin nombres para las variables" (no se debe tomar literalmente, por supuesto) porque no había encapsulación, espacios de nombres, etc.
Además, C no tiene excepciones, por lo tanto, el manejo de errores es muy propenso a errores, ya que depende del usuario de la biblioteca que siempre verifique los valores de retorno de las funciones, mientras que con excepciones, el desarrollador de la biblioteca simplemente lanza una excepción que garantiza que el flujo del programa se detendrá.
C ++ ayuda al tener el constructor init objetos que el compilador llama automáticamente. A diferencia de las estructuras C que deben ser inicializadas por el programador (de ahí otra área propensa a errores).
Por último, hay muchas otras ventajas promocionadas por OOP, como la reutilización de objetos y los conceptos basados en programación genérica, como plantillas y genéricos que le permiten reutilizar el código fuente, etc.
Y muchas otras cosas que tomarían demasiado de mi tiempo para enumerarlas aquí.