Un poco de Historia:
El lenguaje C fue desarrollado por Kernighan y Ritchie en 1972, en la ATT. El lenguaje C++ se comenzó a desarrollar en 1980. Su autor fue B. Stroustrup, también de la ATT. Al comienzo era una extensión del lenguaje C que fue denominada C with classes. Este nuevo lenguaje comenzó a ser utilizado fuera de la ATT en 1983. El nombre C++ es también de ese año, y hace referencia al carácter del operador incremento de C (++). Ante la gran difusión y éxito que iba obteniendo en el mundo de los programadores, la ATT comenzó a estandarizarlo internamente en 1987.
En la actualidad, el C++ es un lenguaje versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar uno de los primeros puestos como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de operadores y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original.
¿Que se pretende?
Si bien es cierto, con el C se han hecho grandes proyectos, inclusive C++ nació de C y, por ejemplo, Java nació de C++; es estúpido pensar que por este hecho C tenga ventajas sobre el C++. Si así fuera, nadie se habría tomado la molestia de evolucionar el C en C++.
Por otro lado, las personas que están comenzando en el mundo de la programación, creen que al comenzar (valga la redundancia) con un lenguaje “Antiguo”, va ha ser más fácil de entender. Pero esto lastimosamente no es cierto, les aseguro que es más fácil comenzar con C++, que con C o Pascal o Fortran o Basic u otros lenguajes que ya cumplieron su ciclo.
También pretendo mostrar los fundamentos del C++ a partir del C. También mostrar algunas de las modificaciones que hizo C++ al C, y las nuevas características ante este.
Manos a la obra
El C++ es un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural es parecido al C y es compatible con él, aunque ya he dicho que presenta ciertas ventajas. Como es un lenguaje orientado a objetos se basa en una filosofía completamente diferente que la del C, pero más robusta.
Comencemos entonces a ver cuales son esas modificaciones del C hacia el C++. Normalmente se trata de aumentar la capacidad del lenguaje y la facilidad de programación en un conjunto de detalles concretos basados en la experiencia de muchos años.
Entonces es importante ver un listado de las principales modificaciones que se han implementado en el C++:
●Cambio en la extensión del nombre de los ficheros
●Declaración simplificada de variables tipo enumeración
●Declaración simplificada de variables correspondientes a estructuras
●Comentarios introducidos en el programa
●Mayor flexibilidad en la declaración de variables
●Scope o visibilidad de variables
●Especificador const para variables
●Especificador const para punteros
●Conversiones explícitas de tipo
●Especificador inline para funciones
●Sobrecarga de funciones
●Valores por defecto de parámetros de una función
●Variables de tipo referencia
●Operadores new y delete para gestión dinámica de memoria
●Punteros de tipo void
●Nueva forma de realizar las operaciones de entrada y salida
●Funciones con número de parámetros variable
Nota: Es importante aclarar que solo se verán ejemplos de los cambios más importantes, ya que este es solo un texto introductorio. Para poder explicar todas las modificaciones y ventajas del C++ sobre el C, se llenarían libros.
Lo primero es el cambio en la extensión *.c, que ahora es *.cpp. Aunque sea un cambio aparentemente estúpido, es importante a la hora de compilar los códigos fuente, ya que esto indica que compilador se va ha usar: si el de C o el de C++.
Es importante aclarar que C++ mantiene una compatibilidad con C, lo cual indica que C++ permite que se haga casi todo lo que se podía en C. Pero También es de aclarar que aunque esto sea posible C++ dispone de una mejor forma de realizar esas tareas. Esto puede ser útil para los programadores que se acostumbraron a C, ya que les permite ir entrando y familiarizándose de a pocos con el C++, combinando las instrucciones y códigos del los dos lenguajes, utilizando obviamente el compilador de C++.
EJEMPLOS
Es difícil explicar en que consiste las ventajas del C++ frente al C. Por esto, y para un mayor entendimiento, es casi necesario mostrar códigos de programas que hagan lo mismo, pero que estén en C y en C++. Estos, claro está, resaltando algunas de las modificaciones listadas anteriormente.
Mayor flexibilidad en la declaración de variables
En cuanto a declaración de variables C++ es muy parecido a C, pero con una importante diferencia. En C las variables tenían que ser declaradas al comienzo de un bloque, antes de la primera sentencia ejecutable de dicho bloque. En C++ las variables pueden ser declaradas en cualquier lugar de un bloque. Esto hace que la declaración de las variables se haga, en el sitio más cercano de donde se van a utilizar por primera vez.
Un caso relevante son los bucles for. En C++ la variable que sirve de contador al bucle puede declararse e inicializarse en la propia sentencia for. Por ejemplo, considérese el siguiente bucle para sumar los elementos de un vector:
Código:
/* Sumar elementos de un vector en C */ #include<stdio.h> main() { int i; int a[]={1,2,3,4,5}; for(i=0;i<5;i++) suma=suma+a[i]; printf("i es %d\n",i); getchar(); }
Código:
Scope o visibilidad de variables// Sumar elementos de un vector en C++ #include<iostream.h> main() { int a[]={1,2,3,4,5}; for(int i=0;i<5;i++) suma+=a[i]; cout<<"\ni es "<<i; getchar(); }
La visibilidad de una variable es la parte del programa en la que esa variable está definida y puede ser utilizada. La duración hace referencia al tiempo que transcurre entre la creación de una variable y el instante en que es destruida. En general la visibilidad de una variable declarada dentro de un bloque abarca desde el punto en el que se define hasta que el bloque finaliza.
Si la declaración de una variable esta por fuera de todos los bloques, incluyendo en bloque main, es visible en toda parte del programa hasta que este culmina; a menos de que una variable local, en cualquier bloque anidado, oculte esta variable global, llamándose igual que esta. Las reglas de duración y visibilidad de C++ son similares a las de C.
Osea que, una variable local declarada dentro de un bloque oculta una variable global del mismo nombre u otra variable local también del mismo nombre declarada en un bloque más exterior. La ventaja que tiene C++ en este caso, es poder referenciar variables globales que este ocultas, por una local, utilizando el operador de resolución de ámbito (::). Por ejemplo, considérese el siguiente caso de ocultación de variables:
Código:
/* Ocultación de variables en C */ #include<stdio.h> int x = 2.0; main() { printf("%d\n", x);/*Escribe 2*/ { printf("%d\n", x);/*Escribe 2*/ int x = 3.0; printf("%d\n", x);/*Escribe 3*/ /*Ahora deseamos imprimir la variable x global pero es imposible hacerlo desde aquí*/ printf("%d\n", x);/*Escribe 3*/ } printf("%d", x);/*Escribe 2*/ getchar(); }
Código:
Especificador const para variables// Ocultación de variables en C++ #include<iostream.h> int x = 2.0; main() { cout<<x<<endl; //Escribe 2 { cout<<x<<endl; //Escribe 2 int x = 3.0; cout<<x<<endl; //Escribe 3 /*Ahora deseamos imprimir la variable x global por lo que utilizamos el operador de resolución de ámbito*/ cout<<::x<<endl; //Escribe 2 } cout<<x<<endl; //Escribe 2 getchar(); }
En C++ el especificador const se puede utilizar con variables y con punteros. Si una variable se define como const indica que que su valor no va a cambiar durante toda la ejecución del programa. Si en alguna sentencia del programa se intenta variar el valor de una variable definida como const, el compilador produce un mensaje de error (obviamente). Las variables de este tipo pueden ser inicializadas pero no pueden pasar , después de la inicialización, por un proceso de asignación, o sea, con el operador =.
Las variables declaradas como const tienen importantes diferencias con las constantes simbólicas definidas con la directiva #define del preprocesador. Porque aunque ambas representan valores que no se puede cambiar, las variables const están sometidas a las mismas reglas de visibilidad y duración que las demás variables del lenguaje.
Las variables const de C++ pueden ser utilizadas para definir el tamaño de un vector en la declaración de éste, cosa que no está permitida en C. Juzguen este pequeño ejemplo:
Código:
/* Asignar tamaño a un array en C */ #define SIZE=5 #include<stdio.h> main() { char cs[SIZE] ; getchar(); }
Código:
// Asignar tamaño a un array en C++ #include<iostream.h> main() { const int SIZE=5; char cs[SIZE] ; getchar(); }