Você está na página 1de 60

LENGUAJE C++

Daniel salinas Martnez


Amrica Georgett Morales Sols

DESARROLLA SOFTWARE UTILIZANDO PROGRAMACION


ESTRUCTURADA
2am
Lenguaje C++
C++ es un lenguaje de programacin, creado a mediados
de 1980 por Bjarne Strousstrup, como extensin del
lenguaje C. Este lenguaje abarca tres paradigmas de la
programacin:
1. Programacin Estructurada
2. Programacin Genrica
3. Programacin Orientada a Objetos
En la actualidad, C++ es un lenguaje verstil, potente y
general. Su xito entre los programadores le ha llevado a
ocupar el primer puesto como herramienta de desarrollo
de aplicaciones, ya sea en Windows o GNU Linux, que es
el sistema operativo en el cual basaremos este tutorial.
C++ en un entorno Linux

Comenzaremos diciendo que los programas se


pueden escribir en cualquier editor de textos de
GNU, entre ellos se encuentran emacs, vim, kate,
gedit, nan, guardando dichos archivos con extensin
.cpp, los cuales seran compilados en GNU/linux
utilizando el compilador GNU de C++, llamado gcc
que puede compilar C, C++, y que adems se apega
al estndar ANSI, permitiendo la portabilidad de
estos cdigos. Dicho compilador se invoca con el
comando gcc. 3
g++ programa.cpp -o programa.out

-o indica el nombre del archivo de salida el cual sera el


ejecutable de nuestro proyecto. Luego para ejecutar,
escribimos sobre la lnea de comandos: ./programa.out y
entonces podremos ejecutar nuestro programa.
Cuando creamos pequeos programas la compilacin de
estos es muy fcil, pero cuando se trabaja con proyectos
grandes, con varios archivos fuente la compilacin resulta
ms difcil, por lo que Linux proporciona la utilera make de
GNU, el cual busca un archivo make donde encontrara toda
la informacin que necesita para crear el ejecutable, si
encuentra el archivo busca la palabra makefile o Makefile,
que son nombres predeterminados.
archivos make
Los archivos make contienen informacin acerca de la
compilacin y enlace del programa, con una sintaxis
muy especifica. Un makefile se define como una lista
de normas y dependencias con sus correspondientes
comandos para crear objetivos, utilizando dichas
normas y dependencias.
Un archivo Makefile es un archivo de texto en el cual
se distinguen cuatro tipos bsicos de declaraciones
Comentarios
Al igual que en los programas, contribuyen a un mejor
entendimiento de las reglas definidas en el archivo.
Los comentarios se inician con el carcter #, y se
ignora todo lo que contine despus de ella, hasta el
final de lnea
Variables
Se definen utilizando el siguiente formato:
nombre = dato. De esta forma, se simplifica el uso de los archivos
Makefile. Para obtener el valor se emplea la variable encerrada
entre parntesis y con el carcter $ al inicio, en este caso todas
las instancias de $(nombre) sern reemplazadas por datos. Por
ejemplo, la Siguiente definicin SRC = main.c origina la siguiente
lnea: gcc $ SRC y ser interpretada como: gcc main.c
Sin embargo, pueden contener ms de un elemento. Por ejemplo:
objects = programa 1.o programa 2.o programa 3.o \ programa
4.o programa 5.o 4programa: $(objects) gcc -o programa $
(objects) Hay que notar que make hace distincin entre
maysculas y minsculas.
Reglas Explicitas
Estas le indican a make que archivos dependen de
otros, as como los comandos requeridos para
compilar un archivo en particular. Su formato es:
archivoDestino: archivosOrigen
Esta regla indica que, para crear archivo Destino,
make debe ejecutar comandos sobre los archivos
archivos Origen. Por ejemplo:
main: main.c funciones.h
gcc -o main main.c funciones.h
Reglas Implcitas
Son similares a las reglas explicitas, pero no indican
los comandos a ejecutar, sino que make utiliza los
sufijos (extensiones de los archivos) para determinar
que comandos ejecutar. Por ejemplo: funciones.o:
funciones.c funciones.h origina la siguiente lnea:
$(CC) $(CFLAGS) c funciones.c funciones.h
Ejemplo de Makefile
CPPFLAGS =
CPPLIBS =
main: Conjunto.o main.o
g++ -o main main.o Conjunto.o $(CPPLIGS)
Conjunto.o: Conjunto.cpp Conjunto.h
g++ $(CPPFLAGS) -c -o Conjunto.o Conjunto.cpp
main.o: Conjunto.h
g++ $(CPPFLAGS) -c -o main.o main.cpp
clean:
rm *.o main
Estructura de un programa
en C++
Para darnos una idea chequemos el siguiente programa
//Mi primer programa en C++
# include <iostream>
using namespace std;
int main (){
count << "hello World";
return 0;
}
El programa anterior es tpico de los programadores
aprendices, el resultado de su impresin en pantalla
es la frase
hello World
Es uno de los ms simples programas que pueden
estar escritos en C + +, pero ya contiene los
componentes fundamentales que todos los programas
escritos en C + +. Vamos a ver lnea por lnea en el
cdigo lo que hemos escrito
//Mi primer programa en C++
Se trata de una lnea de comentario. Todas las lneas
que comiencen con dos signos barra se consideran
comentarios y no tienen ningn efecto sobre el
comportamiento del programa.
El programador puede usar para incluir breves
explicaciones o alegaciones dentro del cdigo fuente
en si. En este caso, la lnea es una breve descripcin
de lo que es nuestro programa.
# include <iostream>
Las lneas que comienza con un smbolo de sostenido
# son directivas para el preprocesador.
En este caso, la directiva # include <iostream>le dice
al preprocesador que incluya el iostream estndar de
archivo. Este archivo especifico (iostream) incluye las
declaraciones de la norma bsica de entrada y salida
de la biblioteca de C++.
using namespace std;
Todos los elementos del modelo de librera de C++ se
declaran dentro de lo que se denomina un espacio de
nombres. Por lo tanto, para poder acceder a su
funcionalidad declaramos 7con esta expresin que
vamos a utilizar estas entidades. Esta lnea es muy
frecuente en los programas que utilizan la biblioteca
estndar, y de hecho ser incluido en la mayora de
los cdigos
int main ()
Esta lnea se corresponde con el comienzo de la definicin
de la funcin principal. La funcin principal es el punto por
donde todos los programas inician su ejecucin,
independientemente de su ubicacin dentro del cdigo
fuente. No importa si hay otras funciones con otros
nombres definidos antes o despus de las instrucciones
que figuran dentro de esta funcin, ya que por definicin
ser siempre la primera en ser ejecutada. Por esa misma
razn, es esencial que todos los programas tengan una
funcin principal. Lo que se contiene dentro de las llaves
que delimitan la funcin es lo que hace cuando se ejecuta.
count <<"hello World";
Esta lnea es una declaracin de C++, en trminos
simples es una expresin que produce algn efecto.
De hecho, esta declaracin lleva a cabo la nica
accin que genera un efecto visible en nuestro
programa. Representa el flujo de salida y su objetivo
es insertar una secuencia de caracteres ( hello
World) en el flujo de salida estndar (pantalla)
return 0;
Esta declaracin hace que la funcin principal termine.
Un cdigo de retorno es 0, cuando la funcin principal
interpreta de manera general que el programa trabajo
como se esperaba, sin ningn error durante su
ejecucin. Esta es la forma ms habitual para poner
fin a un programa C++ en la consola
Variables y Tipos de datos
Una variable es un espacio de memoria reservado en
el ordenador para contener valores que pueden
cambiar durante la ejecucin de un programa. Los
tipos que se le asignen a estas determinan como se
manipular a la informacin contenida en ellas.
Conversin de Tipos

Cuando nuestro programa contiene operaciones


binarias con operando de distintos tipos, estos se
convierten a un tipo en comn, en general para
conversiones explicitas C++ hace uso del casting, lo
que nos permite tener ms precisin en aquellos casos
en los que el resultado de la operacin no es un int y
la variable receptora si lo es.
Espacios de nombres en C++
Los espacios de nombre nos ayudan a evitar
problemas con identificadores, nos permiten, que
existan variables o funciones con el mismo nombre,
declaradas en distintos espacios de nombre, adems
no pueden hacerse declaraciones de namespace
dentro de bloques, como funciones.
Un namespace se define de la siguiente manera

namespace <nombre_del_namespace>
{
... //declaraciones y/o definiciones de variables,
funciones, clases
}
Bloque de sentencias
Las sentencias especifican y controlan el flujo de
ejecucin del programa. Si no existen sentencias
especificas de seleccin o salto, el programa se
ejecuta de forma secuencial en el mismo orden en que
se ha escrito el cdigo fuente.
En C++ el concepto de bloque de sentencias se utiliza
para agrupar un conjunto de sentencias dentro de un
mbito concreto dentro del programa. Un bloque de
sentencias es un conjunto de instrucciones
englobadas bajo llaves { }.
Comparaciones en C++
En C++ las comparaciones se especifican mediante el
operador ==, en primera posicin la constante y como
segundo miembro de la igualdad la variable. Dicha
comparacin nos regresara un booleano. if ( constante
== variable){ }
Asignaciones en C++
En las asignaciones se debe evitar la conversin
explicita de tipos de datos. Se aconseja no hacer
asignaciones mltiples, ya que estas dan a lugar a
actuaciones errneas. En general las sentencias de
asignacin tienen la forma: tipo variable; variable =
expresin;
Sentencia Switch
En casos en los que el programa presenta varias
elecciones despus de checar un expresin mltiple o
multialternativa, donde el valor de una expresin
determina que sentencias sern ejecutadas es mejor
utilizar una sentencia switch.
Sentencia For
La sentencia for se usara para definir un ciclo en el
que una variable se incrementa de manera constante
en cada iteracin y la finalizacin del ciclo se
determina mediante una expresin constante. Como
contador en for se utilizaran preferiblemente variables
de un solo carcter como i, j, k, declarndolas dentro
del mismo ciclo.
for (inicializacion; condicion; incremento)
{ instruccion(es); };
Sentencias While y do While

La sentencia while se usara para definir un ciclo en el


que la condicin de terminacin se evala al principio
del mismo. Su formato general es :
cargar o inicializar variable de condicin;
while(condicion)
{
grupo cierto de instrucciones;
instruccin(es) para salir del ciclo;
};
Sentencia exit y return

La sentencia exit finaliza la ejecucin de un proceso de manera


inmediata, forzando la vuelta al sistema operativo. No se
aconseja su utilizacin en cualquier parte del cdigo, siendo
preferible controlar el flujo en el proceso mediante bucles
condicionales y devolver el control mediante la sentencia return.
La sentencia return se utiliza para salir de una funcin o
procedimiento, volviendo al punto en el cual se llamo a dicha
funcin o procedimiento. En el cdigo hay que minimizar la
utilizacin de return, solo tendra que aparecer una vez en cada
funcin o procedimiento, al final del mismo, de manera que se
tenga un solo punto de entrada a la funcin y un solo punto de
salida de la misma.
Funciones
Una funcin es una parte de un programa (subrutina)
con un nombre, que puede ser invocada (llamada a
ejecucin) desde otras partes tantas veces como se
desee. Un bloque de cdigo que puede ser ejecutado
como una unidad funcional, opcionalmente puede recibir
valores o bien se ejecuta y devuelve un valor. Desde el
punto de vista de la organizacin, podemos decir que
una funcin es algo que permite un cierto orden en una
maraa de algoritmos. Como resumen de lo anterior
podemos concluir que el uso de funciones se justifica en
dos palabras: organizacin y reutilizacin del cdigo.
Estructuras

Una estructura es un grupo de variables relacionadas


de manera lgica, las cuales pueden ser de diferentes
tipos y declaradas en una sola unidad, donde la
unidad es la estructura. Estas son una especie de
hibrido entre las estructuras de C y las clases de C++,
de hecho 18podran ser sustituidas por clases
definidas ya que disponen de tres tipos de
modificadores de acceso: publico, privado y protegido,
y el considerarlas como tales, permite un mayor
control de acceso de las estructuras.
Arreglos
Coleccin ordenada de elementos de un mismo tipo.
Ordenada significa que cada elemento tiene una
ubicacin determinada dentro del arreglo y debemos
conocerla para poder acceder a el. Se definen de la
siguiente manera:
<tipo>nombre variable [longitud];
Apuntadores
Los apuntadores tambin conocidos como punteros,
son variables que guardan direcciones de memoria C+
+. Proporcionan mucha utilidad al programador para
accesar y manipular datos de maneras que no es
posible en otros lenguajes. Tambin son tiles para
pasarle 20parametros a las funciones de tal modo
que les permiten modificar y regresar valores a la
rutina que las llama.
Manejo de Memoria Dinmica
La memoria dinmica es un espacio de
almacenamiento que se solicita en tiempo de
ejecucin. El espacio libre de almacenamiento en C++
se conoce como almacenamiento libre. Adems de
solicitar espacios de almacenamiento, tambin
podemos liberarlos (en tiempo de ejecucin) cuando
dejemos de necesitarlos.
Estructura de Datos
Una estructura de datos nos permite organizar un
conjunto de datos para manipularlos de manera ms
conveniente. A continuacin presentamos las
estructuras de datos ms comunes as como su
implementacin en C++
ACCESIBILIDAD DE
VARIABLES
Se denomina mbito de una variable a la parte de un
programa donde dicha variable
puede ser referenciada por su nombre. Una variable
puede ser limitada a un
bloque, a un fichero, a una funcin, o a una
declaracin de una funcin
variable global
Una variable global existe y tiene valor desde el
principio hasta el final de la
ejecucin del programa. Las funciones tienen todas
carcter global.
Si la declaracin de una variable se hace dentro de un
bloque, el acceso a dicha
variable queda limitado a ese bloque y a los bloques
contenidos dentro de ste
por debajo de su punto de declaracin. En este caso, la
variable recibe el calificativo de local o automtica.
variable local
Una variable local existe y tiene valor desde su punto
de declaracin hasta el
final del bloque donde est definida. Cada vez que se
ejecuta el bloque que la
contiene, la variable local es nuevamente definida, y
cuando finaliza la ejecucin
del mismo, la variable local deja de existir. Un
elemento con carcter local es accesible
solamente dentro del bloque al que pertenece.
variable declarada a nivel
externo
En una variable declarada a nivel externo. esto es. fuera de toda definicin
de
funcin, se pueden utilizar los calificadores static o extern, o bien omitir el
calificador,
en cuyo caso es como si se hubiera especificado extern. A nivel externo no
se pueden utilizar los calificadores auto o register.
Una variable declarada a nivel externo es una definicin de la variable o una
referencia a una variable definida en otra parte. Esto quiere decir que la
declaracin
de una variable externa inicializa la variable a cero (valor por defecto) o a
un
valor especificado.
variable definida a nivel
externo
A una variable definida a nivel externo, se la puede
hacer accesible antes de
su definicin o en offo fichero fuente, utilizando el
calificador extern. Esto quiere
decir, que la utilizacin del calificador extern tiene
sentido cuando la variable ha
sido definida a nivel externo, rrfla vez, y solamente una,
en cualquier parte del
programa y queremos tener acceso a ella en otra parte
donde no es visible.
ENTRADA Y SALIDA
ESTANDAR
Las operaciones de entrada y de salida (E/S) no forman parte
del conjunto de
sentencias de C, sino que pertenecen al conjunto de
funciones de la biblioteca estndar
de C. Por ello, todo fichero fuente que utilice funciones de E/S
correspondientes
a la biblioteca estndar de C, necesita de los prototipos de las
funciones
correspondientes a stas, por lo que deber contener la lnea:
#include "stdio.h"
Tipos de datos
Caracteres: char (tambin es un entero), wchar_t
Enteros: short, int, long, long long
Nmeros en coma flotante: float, double, long double
Booleanos: bool
Vaco: void
Tamaos asociados

Segn la mquina y el compilador que se utilice los tipos primitivos


pueden ocupar un determinado tamao en memoria. La siguiente lista
ilustra el nmero de bits que ocupan los distintos tipos primitivos en la
arquitectura x86.

Otras arquitecturas pueden requerir distintos tamaos de tipos de datos


primitivos. C++ no dice nada acerca de cul es el nmero de bits en un
byte, ni del tamao de estos tipos; ms bien, ofrece solamente las
siguientes "garantas de tipos":

De acuerdo al estndar C99, un tipo char debe ocupar exactamente un


byte compuesto de un mnimo de 8 bits independientemente de la
arquitectura de la mquina
Wchar_t

Para la versin del estndar que se public en 1998,


se decidi aadir el tipo de dato wchar_t, que permite
el uso de caracteres UNICODE, a diferencia del
tradicional char, que contempla simplemente al
cdigo de caracteres ASCII extendido. A su vez, se ha
definido para la mayora de las funciones y clases,
tanto de C como de C++, una versin para trabajar
con wchar_t, donde usualmente se prefija el carcter
w al nombre de la funcin (en ocasiones el carcter es
un infijo).
La palabra reservada "void

La palabra reservada void define en C++ el concepto


de no existencia o no atribucin de un tipo en una
variable o declaracin. Es decir, una funcin declarada
como void no devolver ningn valor. Esta palabra
reservada tambin puede usarse para indicar que una
funcin no recibe parmetros, como en la siguiente
declaracin:

int funcion (void);


La palabra "NULL
dems de los valores que pueden tomar los tipos anteriormente
mencionados, existe un valor llamado NULL, sea el caso numrico para
los enteros, carcter para el tipo char, cadena de texto para el tipo
string, etc. El valor NULL, expresa, por lo regular, la representacin de
una Macro, asignada al valor "0".

Tenemos entonces que:

void* puntero = NULL;


int entero = NULL;
bool boleana = NULL;
char caracter = NULL;
Constructores

on 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.
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.
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.
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 este.
Quitar los vnculos que pudiesen tener otros recursos u
objetos con este.
Funciones miembro

Funcin miembro es aquella que est declarada en


mbito de clase. Son similares a las funciones
habituales, con la salvedad de que el compilador
realizara el proceso de Decoracin de nombre (Name
Mangling en ingls): Cambiar el nombre de la funcin
aadiendo un identificador de la clase en la que est
declarada, pudiendo incluir caracteres especiales o
identificadores numricos. Este proceso es invisible al
programador. Adems, las funciones miembro reciben
implcitamente un parmetro adicional: El puntero this,
que referencia al objeto que ejecuta la funcin.
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.
Clases abstractas

En C++ es posible definir clases abstractas. Una clase


abstracta, o clase base abstracta (ABC), es una que
est diseada solo 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.
Espacios de nombres
Una adicin a las caractersticas de C son los espacios de
nombre (namespace en ingls), los cuales pueden describirse
como reas virtuales bajo las cuales ciertos nombres de variable
o tipos tienen validez. Esto permite evitar las ocurrencias de
conflictos entre nombres de funciones, variables o clases.

El ejemplo ms conocido en C++ es el espacio de nombres


std::, el cual almacena todas las definiciones nuevas en C++
que difieren de C (algunas estructuras y funciones), as como las
funcionalidades propias de C++ (streams) y los componentes de
la biblioteca STL.
Herencia simple

La herencia en C++ es un mecanismo de abstraccin creado para poder


facilitar y mejorar el diseo de las clases de un programa. Con ella se pueden
crear nuevas clases a partir de clases ya hechas, siempre y cuando tengan un
tipo de relacin especial.

En la herencia, las clases derivadas "heredan" los datos y las funciones


miembro de las clases base, pudiendo las clases derivadas redefinir estos
comportamientos (polimorfismo) y aadir comportamientos nuevos propios de
las clases derivadas. Para no romper el principio de encapsulamiento (ocultar
datos cuyo conocimiento no es necesario para el uso de las clases), se
proporciona un nuevo modo de visibilidad de los datos/funciones: "protected".
Cualquier cosa que tenga visibilidad protected se comportar como pblica en
la clase Base y en las que componen la jerarqua de herencia, y como privada
en las clases que NO sean de la jerarqua de la herencia.
Herencia mltiple

La herencia mltiple es el mecanismo que permite al


programador hacer clases derivadas a partir, no de
una sola clase base, sino de varias. Para entender esto
mejor, pongamos un ejemplo: Cuando ves a quien te
atiende en una tienda, como persona que es, podrs
suponer que puede hablar, comer, andar, pero, por
otro lado, como empleado que es, tambin podrs
suponer que tiene un jefe, que puede cobrarte dinero
por la compra, que puede devolverte el cambio, etc. Si
esto lo trasladamos a la programacin sera herencia
mltiple
Algoritmos

Combinando la utilizacin de templates y un estilo especfico para


denotar tipos y variables, la STL ofrece una serie de funciones que
representan operaciones comunes, y cuyo objetivo es "parametrizar"
las operaciones en que estas funciones se ven involucradas de modo
que su lectura, comprensin y mantenimiento, sean ms fciles de
realizar.

Un ejemplo es la funcin copy, la cual simplemente copia variables


desde un lugar a otro. Ms estrictamente, copia los contenidos cuyas
ubicaciones estn delimitadas por dos iteradores, al espacio indicado
por un tercer iterador. La sintaxis es:

copy (inicio_origen, fin_origen, inicio_destino);

Você também pode gostar