O C ++ foi inventado para gerenciar a complexidade com a qual o C não podia lidar. Por exemplo, um problema comum com C era que você podia "ficar sem nomes para variáveis" (não deve ser tomado literalmente, é claro) porque não havia encapsulamento, espaços para nome etc.
Além disso, C não possui exceções, portanto, o tratamento de erros é muito suscetível a erros, pois depende do usuário da biblioteca sempre verificar os valores de retorno de funcs, enquanto que com exceções, o desenvolvedor da biblioteca simplesmente lança uma exceção que garante que o fluxo do programa seja interrompido.
O C ++ ajuda ao ter objetos construtores init que são chamados automaticamente pelo compilador. Ao contrário de estruturas C, que precisam ser inicializadas pelo programador (daí outra área propensa a erros).
Por fim, existem muitas outras vantagens apresentadas pelo OOP, como a reutilização de objetos, bem como os conceitos genéricos baseados em programação, como modelos e genéricos que permitem reutilizar o código fonte, etc.
E muitas outras coisas que levariam muito do meu tempo para listar aqui.