Quais são as diferenças fundamentais entre C e C ++? [fechadas]

37

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 ++? C ++ é uma versão aprimorada de C, ou existem recursos em C que não existem em C ++?

    
por gablin 02.11.2010 / 23:03
fonte

5 respostas

40

Os seguintes pontos referem-se ao C ++:

  1. Sistema de tipo estático (definido pelo usuário): permite verificações estáticas sobre seus dados e seu uso - aponta muitos erros facilmente executáveis em C.
  2. multi- "paradigm": permite trabalhar como em C, com paradigmas orientados a objeto, com paradigmas genéricos, etc.
  3. Construtor / Destructor: a única maneira de dizer uma vez o que fazer ao criar ou destruir algo e ter certeza de que o usuário não terá que encontrar a função correta e usá-la como em C.
  4. RAII (mal nomeado): você não precisa sempre gerenciar a memória. Apenas mantenha as coisas no escopo e use ponteiros inteligentes descrevendo a vida útil de seus objetos. Ainda pode usar ponteiros brutos.
  5. Templates: melhor que macro, uma linguagem real para manipular e gerar tipos antes da compilação final. Apenas falta um sistema de tipos (consulte Conceitos em futuros padrões C ++).
  6. Sobrecargas de operadores: permite descrever operações de maneira sintática simples e até mesmo definir linguagens específicas de domínio incorporadas dentro de seu código C ++.
  7. Nomes com escopo definido: namespaces, classes / struct, functions, etc. possuem regras simples para garantir que os nomes não entrem em conflito.
  8. Sistema de exceções: uma maneira de propagar erros que geralmente são melhores que o código de retorno. Na verdade, o código de retorno é bom para erros lógicos específicos do domínio, porque o aplicativo precisa gerenciá-lo. Exceções são usadas para erros "hard", coisas que tornam o código a seguir incorreto. Ele permite capturar erros maiores na pilha de chamadas, se possível, reagir a essa exceção (registrando ou corrigindo o estado) e, com o RAII, se for bem usado, não tornará todo o programa errado - se bem feito, novamente.
  9. A biblioteca padrão: C tem o seu próprio, mas é tudo "dinâmico". A biblioteca padrão C ++ é quase (não fluxos IO) feita de modelos (contêineres e algoritmos) que permite gerar código apenas para o que você usa. Melhor: como o compilador precisa gerar código, ele saberá muito sobre o contexto e aplicará muitas otimizações sem precisar exigir que o codificador ofusque seu código - graças aos modelos e outras coisas.
  10. const-correctness: A melhor maneira de garantir que você não altere variáveis não deveria. Permite especificar o acesso somente leitura para as variáveis. E isso é verificado apenas em tempo de compilação, portanto, não há custo de tempo de execução.
por 03.11.2010 / 11:25
fonte
30

O C ++ foi inventado para gerenciar a complexidade que o C não conseguia manipular. Por exemplo, um problema comum com C é que você poderia "ficar sem nomes para variáveis" (não deve ser interpretado literalmente, é claro) porque não havia encapsulamento, namespaces, etc.

Além disso, C não possui exceções, portanto o tratamento de erros é muito propenso a erros, pois depende do usuário da biblioteca sempre verificar valores de retorno de funcs, enquanto com exceções, o desenvolvedor da biblioteca simplesmente lança uma exceção que garante que o fluxo do programa ser interrompido.

O C ++ ajuda a ter os objetos init do construtor, que são chamados automaticamente pelo compilador. Ao contrário das estruturas C que precisam ser inicializadas pelo programador (daí outra área propensa a erros).

Finalmente, há muitas outras vantagens apontadas pela POO, como a reutilização de objetos, bem como os conceitos genéricos baseados em programação, como modelos e genéricos, que permitem reutilizar código fonte, etc.

E muitas outras coisas que levariam muito do meu tempo para listar aqui.

    
por 02.11.2010 / 23:20
fonte
15

Em geral, tudo o que existe em C é suportado em C ++. Obviamente, o oposto é absolutamente falso.

Simplesmente falando, C ++ é orientado a objetos (então, 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.

    
por 02.11.2010 / 23:07
fonte
8

O C99 tem alguns recursos que não existem (pelo menos exatamente da mesma forma) em C ++ (por exemplo, membros de matriz flexível, 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 basicamente suporta programação processual estruturada. C ++ suporta isso, assim como programação orientada a objetos, programação genérica e metaprogramação (execução de cálculos arbitrários em tempo de compilação). Com o C ++ 11, ele adiciona alguns bits e peças que poderiam, pelo menos, ser confundidos com suporte de 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.

    
por 02.11.2010 / 23:23
fonte
1

Pessoalmente, acho que os modelos são o recurso mais significativo que o C ++ adiciona ao C.

    
por 03.11.2010 / 09:04
fonte

Tags