Muchos tienden a escribir "C / C ++", como si fueran lo mismo. Aunque comparten muchas similitudes, claramente no son lo mismo.
Pero, ¿cuáles son realmente las diferencias fundamentales entre C y C ++? ¿Es C ++ una versión mejorada de C, o hay características en C que no existen en C ++?
Respuestas:
Los siguientes puntos se relacionan con C ++:
fuente
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í.
fuente
En general, todo lo que existe en C es compatible con C ++. Obviamente lo contrario es absolutamente falso.
Simplemente hablando, C ++ está orientado a objetos (entonces, por ejemplo, tienes clases), C no.
C ++ tiene un tipo booleano que C89 no tiene.
Son idiomas diferentes. Simplemente comparten la mayor parte de la sintaxis.
fuente
_Bool
, conbool
un alias).long long
tipo de datos que (todavía) no forma parte de ISO C ++.C99 tiene algunas características que no existen (al menos exactamente en la misma forma) en C ++ (por ejemplo, miembros de matriz flexible, matrices de longitud variable, etc.)
C99 también agregó mucho a la biblioteca que no está presente en el estándar C ++ 98/03; Sin embargo, la mayor parte de esto se ha agregado a C ++ 11.
En términos de orientación básica, C básicamente admite programación de procedimientos estructurados. C ++ admite eso, así como la programación orientada a objetos, la programación genérica y la metaprogramación (realización de cómputos arbitrarios en tiempo de compilación). Con C ++ 11, agrega algunos bits y piezas que al menos podrían confundirse también con el soporte de programación funcional (por ejemplo, expresiones lambda). C ++ 14 ha agregado algunos más, pero la mayoría de ellos son realmente más convenientes que cualquier tipo de cambio importante en la orientación.
fuente
Personalmente, creo que las plantillas son la característica más importante que C ++ agrega a C.
fuente
#define GENERATE_INTERFACE(T) T T##_func(T x);
; (tipo) sobrecarga / plantillas seguras en C. Estoy de acuerdo con Thomas en que los destructores son una característica mucho más importante que falta en C. Pero los destructores a menudo ocultan código importante. Los espacios de nombres (alcance) son, en mi opinión, los más importantes.