domingo, 21 de abril de 2013

Diferencias entre C y C++

“C++ ha evolucionado para satisfacer las necesidades de sus usuarios; la experiencia de usuarios de diversa formación trabajando en un amplio espectro de aplicaciones ha guiado su evolución (…) Tiempos y espacios de procesamientos de C se consideran inaceptables para C++”.
-BJARNE STROUSTRUP.

 

C tiene los mecanismos básicos para expresar cálculos. Tiene iteraciones, tiene tipos de datos, tiene funciones y eso es todo. Pero no entra en el área de expresar abstracciones.
Así si por ejemplo se quiere hacer una matriz en C, se tiene que declarar una matriz y luego arreglos pero cuando quiero obtener el tercer elemento de la matriz hay que programar el camino hacia el ese tercer elemento.
En C++ se puede definir algo, un concepto abstracto y llamarlo matriz y si no se quiere una matriz rectangular se puede obtener matrices triangulares, cuadradas, etc. Entonces se puede construir ese conjunto de conceptos y luego se programan directamente.
Es más fácil de programar, es más fácil de depurar y, a veces es incluso más fácil para optimizar el rendimiento cuando se expresan las ideas a nivel superior, por qué es el mismo nivel en que opera un experto en el campo. Así, la finalidad principal es llevar de un nivel o lenguaje del hardware a un nivel más humano.
El lenguaje C++ posee una serie de características que lo hacen distinto del lenguaje C. Aunque es posible verlo como una simple extensión del lenguaje C, en realidad implica un cambio en la forma de pensar por parte del programador.
·         El compilador. Es evidente que el compilador de C estándar no acepta los programas de C++. Pero un compilador de C++ puede aceptar los programas de C sin muchos cambios. Es conveniente tener en cuenta que C++ es un lenguaje que cuida mucho más tipología de datos. El compilador de C++ típico no aceptará conversiones a menos que exista una conversión explícita de datos. Esto implica que las funciones prototipo son ahora más necesarias y que los tipos de entrada y salida de las funciones son más importantes de lo que eran en C.


·         Clase iostream. Al igual que en el lenguaje C estándar, C++ no posee una función determinada para las salidas y las entradas, en su lugar hace uso de la corriente o flujo de salida (stream: flujo, alusión a la corriente de datos generada en una operación de entrada y salida).
El operador << se utiliza con el archivo de cabecera iostream.h. En general se encuentra asociada a un dispositivo de almacenamiento temporal conocido como COUT. Este operador despliega en dispositivo de salida los argumentos que se colocan a su derecha.

·         Argumentos por omisión. En el lenguaje C no es posible dejar de incluir un argumento dentro de una lista de parámetros. En C++ es posible definir una serie de valores por omisión, es decir, si el usuario de una función omite enviar un valor de parámetro, la función asignara un valor predefinido a dicho argumento. Para ello basta con añadir en la declaración de la función el nombre del argumento seguido por el signo de asignación y el valor que tomará la variable en caso de que no se envié el correspondiente valor.

·         Funciones en línea (inline). Para explicar esta característica es necesario recordar como genera el compilador el código de una función. La declaración de una variable genera un espacio en la memoria para que pueda almacenar sus datos y cualquier invocación posterior se traduce como un acceso a dicha zona de la memoria. Con este método no importa que la función sea llamada en múltiple ocasiones porque el código solo se encontrará una sola vez en memoria.
Todo es conveniente cuando se realiza la invocación de una función con cierta carga de procesamiento, pero a veces puede resultar caro en términos de velocidad. Por eso C++ proporciona un mecanismo en el que el código de la función se inserta en la línea de código que realiza la llamada. Si el programa define una función en línea que se invoca siendo 132 veces, entonces el código se repite 132 veces en el ejecutable resultante. Se aumenta el tamaño del binario pero la velocidad se incrementa, pues el efecto final es como si se hubiese repetido el código sin invocar ninguna función.
Una función en línea funciona de la misma forma que una macro del procesador. El código definido dentro de una especificación en línea es repetido en todas las referencias en la llamada. Eso es muy benéfico, porque existen menos riesgos de equivocación en los programas de comportamiento inesperado.
·         Argumento por referencia. C++ utiliza un nuevo tipo de paso de parámetros; este tipo de llamado es conocido como envío por referencia; por él, se puede lograr la modificación de los valores de la variable       que se envíe dentro de la función, pero con la claridad en la sintaxis que tiene el envío por valor. La sintaxis asociada a los punteros que confunde frecuentemente a los programadores se puede evitar con el envío por referencia.
·         Sentencias new y delete. El lenguaje C++ dispone de dos nuevas sentencias, las cuales nos sirven para crear y destruir objetos.
En C al alojar una estructuras bajo asignación dinámica de memoria, utilizábamos la función malloc() para realizar una petición de memoria. A su vez, para liberar la memoria obtenida a través de la función malloc(), se utilizaba la función free(). En C++ podemos utilizar la función delete.
·      Sobrecarga de funciones. En C, no es posible repetir el nombre de dos variables en el mismo ámbito. Es claro que se trata de un error por la ambigüedad en los nombres. De la misma forma no es posible declarar dos funciones con el mismo nombre.
En C++ es posible declarar dos funciones que tengan el mismo nombre, pero posean listas de parámetros diferentes, a esto se le llama sobrecarga de funciones. Las listas de parámetros deben de variar en el número o en el tipo de variable declarada.

No hay comentarios.:

Publicar un comentario