You are on page 1of 11

Qu es un Lenguaje de Programacin

Antes de hablar de C++, es necesario explicar que un lenguaje de programacin es una


herramienta que nos permite comunicarnos e instruir a la computadora para que realice una
tarea especfica. Cada lenguaje de programacin posee una sintaxis y un lxico particular,
es decir, forma de escribirse que es diferente en cada uno por la forma que fue creado y por
la forma que trabaja su compilador para revisar, acomodar y reservar el mismo programa en
memoria.
Existen muchos lenguajes de programacin de entre los que se destacan los siguientes:
1.
2.
3.
4.
5.
6.
7.
8.
9.

C
C++
Basic
Ada
Java
Pascal
Python
Fortran
Smalltalk

Historia de C++
C++ es un lenguaje de programacin creado por Bjarne Stroustrup en los laboratorios de
At&T en 1983. Stroustrup tom como base el lenguaje de programacin ms [referencia]
popular en aquella poca el cual era C.
El C++ es un derivado del mtico lenguaje C, el cual fue creado en la dcada de los 70 por
la mano del finado Dennis Ritchie para la programacin del sistema operativo (un sistema
parecido a Unix es GNU/Linux), el cual surgi como un lenguaje orientado a la
programacin de sistemas (System Programming) y de herramientas (Utilities)
recomendado sobre todo para programadores expertos, y que no llevaba implementadas
muchas funciones [cmo cules?] que hacen a un lenguaje ms comprensible.
Sin embargo, aunque esto en un inicio se puede convertir en un problema, en la prctica es
su mayor virtud, ya que permite al programador un mayor control sobre lo que est
haciendo. Aos ms tarde, un programador llamado Bjarne Stroustrup, creo lo que se
conoce como C++.
Necesitaba ciertas facilidades de programacin, incluidas en otros lenguajes pero que C no
soportaba, al menos directamente, como son las llamadas clases y objetos, principios
usados en la programacin actual. Para ello redise C, ampliando sus posibilidades pero
manteniendo su mayor cualidad, la de permitir al programador en todo momento tener
controlado lo que est haciendo, consiguiendo as una mayor rapidez que no se conseguira
en otros lenguajes.

C++ pretende llevar a C a un nuevo paradigma de clases y objetos con los que se realiza
una comprensin ms humana basndose en la construccin de objetos, con caractersticas
propias solo de ellos, agrupados en clases. Es decir, si yo quisiera hacer un programa sobre
animales, creara una clase llamada animales, en la cual cada animal, por ejemplo un pato,
sera un objeto, de tal manera que se ve el intento de esta forma de programar por ser un fiel
reflejo de cmo los humanos (en teora) manejamos la realidad [referencia].
Se dice que nuestro cerebro trabaja de forma relacional [referencia] (relacionando hechos),
es por ello que cada vez que recuerdas algo, (cuentas un hecho), termina siendo diferente
(se agregan u omiten partes).

Qu es C++
C++ es un lenguaje de programacin orientado a objetos que toma la base del lenguaje C y
le agrega la capacidad de abstraer tipos como en Smalltalk.
La intencin de su creacin fue el extender al exitoso lenguaje de programacin C con
mecanismos que permitieran la manipulacin de objetos. En ese sentido, desde el punto de
vista de los lenguajes orientados a objetos, el C++ es un lenguaje hbrido [por? fusionar
con el siguiente].
Posteriormente se aadieron facilidades de programacin genrica, que se sum a los otros
dos paradigmas que ya estaban admitidos (programacin estructurada y la programacin
orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programacin
multiparadigma.

Ventajas y desventajas
Ventajas
Lenguaje de programacin orientado a objetos.
Lenguaje muy didctico, con este lenguaje puedes aprender muchos otros lenguajes con gran
facilidad, como C#, Java, Visual Basic, Javascript, PHP, entre otros.
Es muy potente en lo que se refiere a creacin de sistemas complejos, un lenguaje muy
robusto.
Actualmente, puede compilar y ejecutar cdigo de C, ya viene con libreras para realizar esta
labor.
Desventajas
Es mucho ms difcil de usar que otros lenguajes de programacin.
Es difcil programar bases de datos
Los punteros (es muy complicado su sistema).

Caractersticas
Las principales caractersticas del Lenguaje C ++ son:
1. Tiene un conjunto completo de instrucciones de control.
2. Permite la agrupacin de instrucciones.
3. Incluye el concepto de puntero (variable que contiene la direccin de otra variable).
4. Los argumentos de las funciones se transfieren por su valor.
5. E/S no forma parte del lenguaje, sino que se proporciona a travs de una biblioteca de funciones.
6. Permite la separacin de un programa en mdulos que admiten compilacin independiente.
7. Programacin de bajo nivel (nivel bit).

Tipos de datos
C++ tiene los siguientes tipos de datos fundamentales:
1. Caracteres: char (tambin es un entero), wchar_t
2. Enteros: short, int, long, long long
3. Nmeros en coma flotante: float, double, long double
5. Booleanos: bool
6. Vaco: void
7. El modificador unsigned se puede aplicar a enteros para obtener nmeros sin signo (por omisin
los enteros contienen signo), con lo que se consigue un rango mayor de nmeros naturales.

Herramientas necesarias
Las principales herramientas necesarias para escribir un programa en C++ son las
siguientes:
1. Un equipo ejecutando un sistema operativo.
2. Un compilador de C++
1. Windows MingW (GCC para Windows) o MSVC (compilador de microsoft
con versin gratuita)
2. Linux (u otros UNIX): g++
3. Mac (con el compilador Xcode)
3. Un editor cualquiera de texto, o mejor un entorno de desarrollo (IDE)
1. Windows:
1. Microsoft Visual C++ (conocido por sus siglas MSVC). Incluye
compilador y posee una versin gratuita (versin express)
2. Bloc de notas (no recomendado)
3. Editor Notepad++
4. DevCpp (incluye MingW - en desuso, no recomendado, incluye
tambin un compilador)
5. Code::Blocks
2. Linux (o re-compilacin en UNIX):

1. Gedit
2. Kate
3. KDevelop
4. Code::Blocks
5. SciTE
6. GVim
3. Mac:
1. Xcode (con el compilador trae una IDE para poder programar)
4. Tiempo para practicar
5. Paciencia
Adicional
1. Ingls (Recomendado)
2. Estar familiarizado con C u otro lenguaje derivado (PHP, Python, etc).
Es recomendable tener conocimientos de C, debido a que C++ es una mejora de C, tener los
conocimientos sobre este te permitir avanzar ms rpido y comprender an ms. Tambin,
hay que recordar que C++, admite C, por lo que se puede programar (reutilizar), funciones
de C que se puedan usar en C++.
Aunque No es obligacin aprender C, es recomendable tener nociones sobre la
programacin orientada a objetos en el caso de no tener conocimientos previos de
programacin estructurada. Asimismo, muchos programadores recomiendan no saber C
para saber C++, por ser el primero de ellos un lenguaje imperativo o procedimental y el
segundo un lenguaje de programacin orientado a objetos.

Principios
Todo programa en C++ debe tener la funcin principal main() (a no ser que se especifique
en tiempo de compilacin otro punto de entrada, que en realidad es la funcin que tiene el
main())

La funcin principal del cdigo fuente main debe tener uno de los siguientes prototipos:

int main()
int main(int argc, char** argv)

Aunque no es estndar algunas implementaciones permiten

int main(int argc, char** argv, char** env)

La primera es la forma por omisin de un programa que no recibe parmetros ni


argumentos. La segunda forma tiene dos parmetros: argc, un nmero que describe el
nmero de argumentos del programa (incluyendo el nombre del programa mismo), y argv,
un puntero a un array de punteros, de argc elementos, donde el elemento argv[i] representa
el i-simo argumento entregado al programa. En el tercer caso se aade la posibilidad de
poder acceder a las variables de entorno de ejecucin de la misma forma que se accede a
los argumentos del programa, pero reflejados sobre la variable env.
El tipo de retorno de main es un valor entero int. Al finalizar la funcin main, debe incluirse
el valor de retorno (por ejemplo, return 0;, aunque el estndar prev solamente dos posibles
valores de retorno: EXIT_SUCCESS y EXIT_FAILURE, definidas en el archivo cstdlib), o
salir por medio de la funcin exit. Alternativamente puede dejarse en blanco, en cuyo caso
el compilador es responsable de agregar la salida adecuada.

El concepto de clase
Los objetos en C++ son abstrados mediante una clase. Segn el paradigma de la
programacin orientada a objetos un objeto consta de:
1. Identidad, que lo diferencia de otros objetos (Nombre que llevara la clase a la que
pertenece dicho objeto).
2. Mtodos o funciones miembro
3. Atributos o variables miembro
Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas
caractersticas (atributos). Su nmero de patas, el color de su pelaje o su tamao son
algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento...
esas son las funciones de la clase.

Constructores
Son unos mtodos especiales que se ejecutan automticamente al crear un objeto de la
clase. En su declaracin no se especifica el tipo de dato que devuelven, y poseen el mismo
nombre que la clase a la que pertenecen. Al igual que otros mtodos, puede haber varios
constructores sobrecargados, aunque no pueden existir constructores virtuales.
Como caracterstica especial a la hora de implementar un constructor, justo despus de la
declaracin de los parmetros, se encuentra lo que se llama "lista de inicializadores". Su
objetivo es llamar a los constructores de los atributos que conforman el objeto a construir.
Cabe destacar que no es necesario declarar un constructor al igual que un destructor, pues el
compilador lo puede hacer, aunque no es la mejor forma de programar.

Existen varios tipos de constructores en C++:


1. Constructor predeterminado. Es el constructor que no recibe ningn parmetro en
la funcin. Si no se definiera ningn constructor, el sistema proporcionara uno
predeterminado. Es necesario para la construccin de estructuras y contenedores de
la STL.
2. Constructor de copia. Es un constructor que recibe un objeto de la misma clase, y
realiza una copia de los atributos del mismo. Al igual que el predeterminado, si no
se define, el sistema proporciona uno.
3. Constructor de conversin. Este constructor, recibe como nico parmetro, un
objeto o variable de otro tipo distinto al suyo propio. Es decir, convierte un objeto
de un tipo determinado a otro objeto del tipo que estamos generando.
Constructores + Memoria heap Un objeto creado de la forma que se vio hasta ahora, es
un objeto que vive dentro del scope (las llaves { }) en el que fue creado. Para que un objeto
pueda seguir viviendo cuando se saque del scope en el que se cre, se lo debe crear en
memoria heap. Para esto, se utiliza el operador new, el cual asigna memoria para almacenar
al objeto creado, y adems llama a su constructor (por lo que se le pueden enviar
parmetros).

Destructores
Los destructores son funciones miembro especiales llamadas automticamente en la
ejecucin del programa, y por tanto no tienen por qu ser llamadas explcitamente por el
programador. Sus principales cometidos son:

Liberar los recursos computacionales que el objeto de dicha clase haya adquirido en
tiempo de ejecucin al expirar ste.
Quitar los vnculos que pudiesen tener otros recursos u objetos con ste.

Los destructores son invocados automticamente al alcanzar el flujo del programa el fin del
mbito en el que est declarado el objeto. El nico caso en el que se debe invocar
explcitamente al destructor de un objeto, es cuando ste fue creado mediante el
operador new, es decir, que ste vive en memoria heap, y no en la pila de ejecucin del
programa. La invocacin del destructor de un objeto que vive en heap se realiza a travs del
operador delete o delete[] para arrays.
Si no se utilizara el operador delete y delete[] en ese caso, la memoria ocupada por un
Entero y array De Enteros respectivamente, quedara ocupada sin sentido. Cuando una
porcin de memoria queda ocupada por una variable que ya no se utiliza, y no hay forma de
acceder a ella, se denomina un 'memory leak'. En aplicaciones grandes, si ocurren muchos
memory leaks, el programa puede terminar ocupando bastante ms memoria RAM de la
que debera, lo que no es para nada conveniente. Es por esto, que el manejo de memoria
heap debe usarse conscientemente.

Existen dos tipos de destructores pueden ser pblicos o privados, segn si se declaran:

Si es pblico se llama desde cualquier parte del programa para destruir el objeto.
Si es privado no se permite la destruccin del objeto por el usuario.

Plantillas
Las plantillas son el mecanismo de C++ para implantar el paradigma de la programacin
genrica. Permiten que una clase o funcin trabaje con tipos de datos abstractos,
especificndose ms adelante cuales son los que se quieren usar. Por ejemplo, es posible
construir un vector genrico que pueda contener cualquier tipo de estructura de datos. De
esta forma se pueden declarar objetos de la clase de este vector que contengan enteros,
flotantes, polgonos, figuras, fichas de personal, etc.
La declaracin de una plantilla se realiza anteponiendo la declaracin template
<typename A,....> a la declaracin de la estructura (clase, estructura o funcin) deseado.

Clases abstractas
En C++ es posible definir clases abstractas. Una clase abstracta, o clase base abstracta
(ABC), es una que est diseada slo como clase padre de las cuales se deben derivar
clases hijas. Una clase abstracta se usa para representar aquellas entidades o mtodos que
despus se implementarn en las clases derivadas, pero la clase abstracta en s no contiene
ninguna implementacin, solamente representa los mtodos que se deben implementar. Por
ello, no es posible instanciar una clase abstracta, pero s una clase concreta que implemente
los mtodos definidos en ella.
Las clases abstractas son tiles para definir interfaces, es decir, un conjunto de mtodos que
definen el comportamiento de un mdulo determinado. Estas definiciones pueden utilizarse
sin tener en cuenta la implementacin que se har de ellos.
En C++ los mtodos de las clases abstractas se definen como funciones virtuales puras.

Biblioteca de entrada y salida


Las clases basic_ostream y basic_stream, y los objetos cout y cin, proporcionan la
entrada y salida estndar de datos (teclado/pantalla). Tambin est disponible cerr, similar
a cout, usado para la salida estndar de errores. Estas clases tienen sobrecargados los
operadores << y >>, respectivamente, con el objeto de ser tiles en la insercin/extraccin
de datos a dichos flujos. Son operadores inteligentes, ya que son capaces de adaptarse al
tipo de datos que reciben, aunque tendremos que definir el comportamiento de dicha
entrada/salida para clases/tipos de datos definidos por el usuario.

Diferencias de tipos respecto a C


En C++, cualquier tipo de datos que sea declarado completo (fully qualified, en ingls) se
convierte en un tipo de datos nico. Las condiciones para que un tipo de datos T sea
declarado completo son a grandes rasgos las siguientes:

Es posible al momento de compilacin conocer el espacio asociado al tipo de datos


(es decir, el compilador debe conocer el resultado de sizeof(T)).
T Tiene al menos un constructor, y un destructor, bien declarados.
Si T es un tipo compuesto, o es una clase derivada, o es la especificacin de una
plantilla, o cualquier combinacin de las anteriores, entonces las dos condiciones
establecidas previamente deben aplicar para cada tipo de dato constituyente.

En general, esto significa que cualquier tipo de datos definido haciendo uso de las
cabeceras completas, es un tipo de datos completo.
En particular, y, a diferencia de lo que ocurra en C, los tipos definidos por medio de
struct o enum son tipos completos. Como tales, ahora son sujetos a sobrecarga,
conversiones implcitas, etctera.
Los tipos enumerados, entonces, ya no son simplemente alias para tipos enteros, sino que
son tipos de datos nicos en C++. El tipo de datos bool, igualmente, pasa a ser un tipo de
datos nico, mientras que en C funcionaba en algunos casos como un alias para alguna
clase de dato de tipo entero.

Compiladores
Uno de los compiladores libres de C++ es el de GNU, el compilador G++ (parte del
proyecto GCC, que engloba varios compiladores para distintos lenguajes). Otros
compiladores comunes son Intel C++ Compiler, el compilador de Xcode, el compilador de
Borland C++, el compilador de CodeWarrior C++, el compilador g++ de Cygwin, el
compilador g++ de MinGW, el compilador de Visual C++, Carbide.c++, entre otros.

Proceso de desarrollo de un programa


Si se desea escribir un programa en C++ se debe ejecutar como mnimo los siguientes
pasos:
1. Escribir con un editor de texto plano un programa sintcticamente vlido o usar un
entorno de desarrollo (IDE) apropiado para tal fin
2. Compilar el programa y asegurarse de que no han habido errores de compilacin
3. Ejecutar el programa y comprobar que no hay errores de ejecucin

Este ltimo paso es el ms costoso, porque en programas grandes, averiguar si hay o no un


fallo prcticamente puede ser una tarea totmica.

Comentarios
Cuando se escriben programas es muy til agregar comentarios que ayuden a explicar lo
que realiza un programa. En C++ se pueden utilizar tres tipos de comentarios: al estilo C, al
estilo C++ y usando preprocesador.
Los comentarios al estilo C se caracterizan por lo siguiente: comenzar el "bloque" de
comentarios con /* y terminar dicho "bloque" de comentarios con */
Usando el estilo de cdigo de C++ slo pueden ocupar una lnea
Una buena prctica de programacin es pensar que se programa a sabiendas de que otro
programador, tal vez el lector mismo en un futuro, tenga que "desencriptar" qu quiso hacer
ah y por qu.
Otra posible forma de comentar cdigo es usando el preprocesador. Esto se detallar ms
adelante en profundidad, por ahora la parte til del preprocesador que interesa es la
siguiente:
#if 0
Comentarios sobre el programa /parte del programa.
Pueden ocupar mltiples lneas.
Ms complicado de visualizar que los comentarios C/C++
#endif

Este tipo de comentarios se usan rara vez. Generalmente son difciles de localizar, incluso
para programadores experimentados que trabajan en papel, y son fciles de distinguir en
casi cualquier IDE. Es recomendable indicar que se tratan de comentarios, o directamente
no usarlos, salvo si son grandes cantidades de comentarios.

Variables y constantes
Una variable, como su nombre lo indica, es un determinado objeto cuyo valor puede
cambiar durante el proceso de una tarea especfica. Contrario a una variable, una constante
es un determinado objeto cuyo valor no puede ser alterado durante el proceso de una tarea
especfica. En C, C++ para declarar variables no existe una palabra especial, es decir, las
variables se declaran escribiendo el tipo seguido de uno o ms identificadores o nombres de
variables. Por otro lado, para declarar constantes existe la palabra reservada const, as como
la directiva #define. A continuacin se muestran ejemplos de declaracin de variables y
constantes.

Standard Template Library (STL)


Los lenguajes de programacin suelen tener una serie de bibliotecas de funciones
integradas para la manipulacin de datos a nivel ms bsico. En C++, adems de poder usar
las bibliotecas de C, se puede usar la nativa STL (Standard Template Library), propia del
lenguaje. Proporciona una serie plantillas (templates) que permiten efectuar operaciones
sobre el almacenado de datos, procesado de entrada/salida.

Sobrecarga de operadores
La sobrecarga de operadores es una forma de hacer polimorfismo. Es posible definir el
comportamiento de un operador del lenguaje para que trabaje con tipos de datos definidos
por el usuario. No todos los operadores de C++ son factibles de sobrecargar, y, entre
aquellos que pueden ser sobrecargados, se deben cumplir condiciones especiales. En
particular, los operadores sizeof y :: no son sobrecargables.
No es posible en C++ crear un operador nuevo.
Los comportamientos de los operadores sobrecargados se implementan de la misma manera
que una funcin, salvo que esta tendr un nombre especial: Tipo de dato de
devolucin operator<token del operador>(parmetros)

Los siguientes operadores pueden ser sobrecargados:

Operadores Unarios
o Operador * (de indireccin)
o Operador -> (de indireccin)
o Operador & (de direccin)
o Operador +
o Operador o Operador ++
o Operador -Operadores Binarios
o Operador ==
o Operador +
o Operador o Operador *
o Operador /
o Operador %
o Operador <<
o Operador >>
o Operador &
o Operador ^
o Operador |
o Operador []
o Operador ()

Operadores de Asignacin
o Operador =
o Operador +=
o Operador -=
o Operador *=
o Operador /=
o Operador %=
o Operador <<=
o Operador >>=
o Operador &=
o Operador ^=
o Operador |=

You might also like