You are on page 1of 23

Programacin de

Lenguaje
Estructurado
CUADERNO DIGITAL
2 QUIMESTRE

Lenguaje C++
C++ es un lenguaje de programacin diseado a mediados de los aos 1980
por Bjarne Stroustrup. La intencin de su creacin fue el extender al lenguaje
de programacin C mecanismos que permiten la manipulacin de objetos. En
ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el
C++ es un lenguaje hbrido.
Posteriormente se aadieron facilidades de programacin genrica, que se
sumaron a los paradigmas de programacin estructurada programacin
orientada a objetos. Por esto se suele decir que el C++ es un lenguaje de
programacin multiparadigma
Actualmente existe un estndar, denominado ISO C++, al que se han
adherido la mayora de los fabricantes de compiladores ms modernos.
Existen tambin algunos intrpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores, y de
poder crear nuevos tipos que se comporten como tipos fundamentales.

Operadores
Los operadores son palabras o smbolos que hacen que un
programa acte sobre las variables.
En C existen diversos tipos de operadores. Aritmticos,
relacionales, de asignacin, lgico.

Un ejemplo de programa
/* Esta cabecera permite usar los objetos que encapsulan los
descriptores stdout y stdin: cout(<<) y cin(>>)*/ #include
<iostream> using namespace std; int main() { cout << "Hola
mundo" << endl; cin.get(); }

Al usar la directiva #include se le dice al compilador que busque e interprete todos los
elementos definidos en el archivo que acompaa la directiva (en este caso, iostream). Para
evitar sobrescribir los elementos ya definidos al ponerles igual nombre, se crearon los
espacios de nombres o namespace del singular en ingls. En este caso hay un espacio de
nombres llamado std, que es donde se incluyen las definiciones de todas las funciones y
clases que conforman la biblioteca estndar de C++. Al incluir la sentencia using namespace
std le estamos diciendo al compilador que usaremos el espacio de nombres std por lo que no
tendremos que incluirlo cuando usemos elementos de este espacio de nombres, como pueden
ser los objetos cout y cin, que representan el flujo de salida estndar (tpicamente la pantalla o
una ventana de texto) y el flujo de entrada estndar (tpicamente el teclado).
La definicin de funciones es igual que en C, salvo por la caracterstica de que si main no va
a recoger argumentos, no tenemos por qu ponrselos, a diferencia de C, donde haba que
ponerlos explcitamente, aunque no se fueran a usar. Queda solo comentar que el
smbolo << se conoce como operador de insercin, y grosso modo est enviando a cout lo
que queremos mostrar por pantalla para que lo pinte, en este caso la cadena "Hola mundo". El
mismo operador << se puede usar varias veces en la misma sentencia, de forma que gracias a
esta caracterstica podremos concatenar el objeto endl al final, cuyo resultado ser imprimir
un retorno de lnea.
Por ltimo tomaremos una secuencia de caracteres del teclado hasta el retorno de lnea
(presionando ENTER), llamando al mtodo get del objeto cin.

Tipos de datos

C++ tiene los siguientes tipos fundamentales:


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
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.

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.
El tamao reconocido de char es de 1. Es decir, sizeof(char) siempre devuelve 1.
Un tipo short tiene al menos el mismo tamao que un tipo char.
Un tipo long tiene al menos el doble tamao en bytes que un tipo short.
Un tipo int tiene un tamao entre el de short y el de long, ambos inclusive,
preferentemente el tamao de un apuntador de memoria de la mquina.
Un tipo unsigned tiene el mismo tamao que su versin signed.

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). Por ejemplo:
strcpy - wstrcpy
std::string - std::wstring
std::cout - std::wcout
Cabe resaltar que en C se define wchar_t como:
typedef unsigned short wchar_t;
Mientras que en C++ es en s mismo un tipo de dato.

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 voidno 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);
Aunque la tendencia actual es la de no colocar la palabra "void".
Adems se utiliza para determinar que una funcin no retorna un valor, como en:
void funcion (int parametro);
Cabe destacar que void no es un tipo. Una funcin como la declarada anteriormente no puederetornar un valor por
medio de return: la palabra clave va sola. No es posible una declaracin del tipo:
void t; //Est mal
En este sentido, void se comporta de forma ligeramente diferente a como lo hace en C, especialmente en cuanto a su
significado en declaraciones y prototipos de funciones.
Sin embargo, la forma especial void * indica que el tipo de datos es un puntero. Por ejemplo:
void *memoria;
Indica que memoria es un puntero a alguna parte, donde se guarda informacin de algn tipo. El programador es
responsable de definir estos "algn", eliminando toda ambigedad. Una ventaja de la declaracin "void *" es que
puede representar a la vez varios tipos de datos, dependiendo de la operacin de cast escogida. La memoria que
hemos apuntado en alguna parte, en el ejemplo anterior, bien podra almacenar un entero, un flotante, una cadena de
texto o un programa, o combinaciones de stos. Es responsabilidad del programador recordar qu tipo de datos hay y
garantizar el acceso adecuado.

La palabra "NULL"
Adems de los valores que pueden tomar los tipos anteriormente
mencionados, existe un valor llamado NULL, sea el caso
numrico para los enteros, caracter 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;
El valor de las variables anteriores nos dara 0. A diferencia de la
variable "caracter", que nos dara el equivalente a NULL, '\0',
para caracteres.

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())
int 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.

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.
Tomando el ejemplo de la Clase Punto, si deseamos que cada vez que se cree un objeto de esta clase las
coordenadas del punto sean igual a cero podemos agregar un constructor como se muestra a continuacin:
class Punto { public: float x; // Coordenadas del punto float y; // Constructor Punto() : x(0), y(0){ //
Inicializamos las variables "x" e "y" } }; // Main para demostrar el funcionamiento de la clase # include
<iostream> // Esto nos permite utilizar "cout" using namespace std; int main () { Punto MiPunto; //
creamos un elemento de la clase Punto llamado MiPunto cout << "Coordenada X: " << MiPunto.x <<
endl; // mostramos el valor acumulado en la variable x cout << "Coordenada Y: " << MiPunto.y <<
endl; // mostramos el valor acumulado en la variable y getchar(); // le indicamos al programa que espere
al buffer de entrada (detenerse) return 0; }

Existen varios tipos de constructores en C++:


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 de el 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). El operador new se utiliza de
la siguiente manera:

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. Ejemplo:
int main() { int *unEntero = new int(12); //asignamos un entero en memoria heap con el
valor 12 int *arrayDeEnteros = new int[25]; //asignamos memoria para 25 enteros(no
estan inicializados) delete unEntero; //liberamos la memoria que ocupaba unEntero
delete[] arrayDeEnteros; //liberamos la memoria ocupada por arrayDeEnteros return 0; }

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. Por ejemplo:
ostream& operator<<(ostream& fs, const Punto& punto) { return fs << punto.x <<
"," << punto.y; }
De esta forma, para mostrar un punto, solo habra que realizar la siguiente expresin:
//... Punto p(4,5); //... cout << "Las coordenadas son: " << p << endl; //...
Es posible formatear la entrada/salida, indicando el nmero de dgitos decimales a
mostrar, si los textos se pasarn a minsculas o maysculas, si los nmeros recibidos
estn en formato octal o hexadecimal, etc.

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); De este modo, todos los
datos que estn entre inicio_origen y fin_origen, excluyendo el dato ubicado
en este ltimo, son copiados a un lugar descrito o apuntado por inicio_destino.
Un algoritmo muy importante que viene implementado en la biblioteca STL,
es

Compilador
Un compilador es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro
lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente
el segundo lenguaje es lenguaje de mquina, pero tambin puede ser un cdigo intermedio , o simplemente texto.
Este proceso de traduccin se conoce como compilacin.
Un compilador es un programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel, a otro
lenguaje de nivel inferior (tpicamente lenguaje de mquina). De esta manera un programador puede disear un
programa en un lenguaje mucho ms cercano a como piensa un ser humano, para luego compilarlo a un programa
ms manejable por una computadora. Partes del Compilador:
Anlisis: Se trata de la comprobacin de la correccin del programa fuente, e incluye las fases correspondientes
al Anlisis Lxico (que consiste en la descomposicin del programa fuente en componentes lxicos), Anlisis
Sintctico (agrupacin de los componentes lxicos en frases gramaticales ) y Anlisis Semntico (comprobacin de la
validez semntica de las sentencias aceptadas en la fase de A Sntesis: Su objetivo es la generacin de la salida
expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generacin de
Cdigo (normalmente se trata de cdigo intermedio o de cdigo objeto) y de Optimizacin de Cdigo (en las que se
busca obtener un cdigo lo ms eficiente posible).
Front-end: es la parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los
valores de la tabla de smbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a
compilar, y est compuesta por las fases comprendidas entre el Anlisis Lxico y la Generacin de Cdigo
Intermedio.

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.

Ventajas del c++


El lenguaje C ha sido pensado para ser altamente transportable.
* Un ncleo del lenguaje simple, con funcionalidades aadidas importantes, como funciones
matemticas y de manejo de archivos, proporcionadas por bibliotecas.
* Es un lenguaje muy flexible que permite programar con mltiples estilos. Uno de los ms empleados es
el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura).
* Un sistema de tipos que impide operaciones sin sentido.
* Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir
mltiples archivos de cdigo fuente.
* Acceso a memoria de bajo nivel mediante el uso de punteros
* Interrupciones al procesador con uniones.
* Un conjunto reducido de palabras clave.
* Por defecto, el paso de parmetros a una funcin se realiza por valor. El paso por referencia se
consigue pasando explcitamente a las funciones las direcciones de memoria de dichos parmetros.
* Punteros a funciones y variables estticas, que permiten una forma rudimentaria de encapsulado y
polimorfism
Graias a este tipo de programas la tecnologa ha podido alcanzar un gran avance en todos los mbitos
tanto nacionales como internacionales, es por eso que es necesario que este tipo de lenguaje se aprenda
para poder realizar utileras capaces de trabajar y apoyar proyectos que ayudarn al manejo mas sencillo
de una empresa en particular pequeas aplicaciones en el hogar.
El Lenguaje C es relativamente sencillo, pero su gran flexibilidad es terreno abonado para la creacin de
vicios y prcticas no adecuadas de programacin, por lo cual debe cuidarse la enseanza de su estilo de
programacin, tcnica y filosofa de trabajo.

Desventajas del c++


Al igual que otros lenguajes tiene sus inconvenientes como:
* Recoleccin de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc"
desarrollada por Sun Microsystems, o el Recolector de basura de Boehm.
* Soporte para programacin orientada a objetos, aunque la implementacin original de C++ fue un
preprocesador que traduca cdigo fuente de C++ a C.
* Encapsulacin.
* Funciones anidadas, aunque GCC tiene esta caracterstica como extensin.
* Polimorfismo en tiempo de cdigo en forma de sobrecarga, sobrecarga de operadores y slo dispone
de un soporte rudimentario para la programacin genrica.
* Soporte nativo para programacin multihilo y redes de computadores.
* Carece de instrucciones de entrada/salida, de instrucciones para manejo de cadenas de caracteres, con
lo que este trabajo queda para la librera de rutinas, con la consiguiente prdida de transportabilidad
La excesiva libertad en la escritura de los programas puede llevar a errores en la programacin que, por
ser correctos sintcticamente no se detectan a simple vista. Por otra parte las precedencias de los
operadores convierten a veces las expresiones en pequeos rompecabezas. A pesar de todo, C ha
demostrado ser un lenguaje extremadamente eficaz y expresivo.

You might also like