Muitos tendem a escrever "C / C ++", como se fossem a mesma coisa. Embora compartilhem muitas semelhanças, elas claramente não são as mesmas.
Mas quais são realmente as diferenças fundamentais entre C e C ++? O C ++ é uma versão aprimorada do C ou há recursos no C que não existem no C ++?
Respostas:
Os seguintes pontos estão relacionados ao C ++:
fonte
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.
fonte
Em geral, tudo o que existe em C é suportado em C ++. Obviamente, o oposto é absolutamente falso.
Simplesmente falando, C ++ é orientado a objetos (por exemplo, você tem classes), C não.
C ++ tem um tipo booleano C89 não.
Eles são idiomas diferentes. Eles apenas compartilham a maior parte da sintaxe.
fonte
_Bool
, combool
um alias).long long
tipo de dados que ainda não faz parte do ISO C ++.O C99 possui alguns recursos que não existem (pelo menos exatamente da mesma forma) em C ++ (por exemplo, membros de matriz flexíveis, matrizes de comprimento variável, etc.)
O C99 também adicionou muito à biblioteca que não está presente no padrão C ++ 98/03; a maior parte disso foi adicionada ao C ++ 11.
Em termos de orientação básica, C suporta basicamente programação processual estruturada. O C ++ suporta isso, além de programação orientada a objetos, programação genérica e metaprogramação (executando computação arbitrária em tempo de compilação). Com o C ++ 11, ele adiciona alguns bits e partes que também podem ser confundidos com suporte à programação funcional (por exemplo, expressões lambda). O C ++ 14 adicionou mais alguns, mas a maioria deles é realmente mais conveniente do que qualquer tipo de mudança importante na orientação.
fonte
Pessoalmente, acho que os modelos são o recurso mais significativo que o C ++ adiciona ao C.
fonte
#define GENERATE_INTERFACE(T) T T##_func(T x);
; (tipo) sobrecarga / modelos seguros em C. Concordo com Thomas que os destruidores são um recurso muito mais importante que C está ausente. Mas os destruidores costumam ocultar códigos importantes. Namespaces (escopo) são, na minha opinião, os mais importantes.