Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El lenguaje C++ se comenz a desarrollar en 1980. Su autor fue B. Stroustrup, tambin de la ATT. Al comienzo era una extensin del lenguaje C que fue denominada C withclasses. Este nuevo lenguaje comenz a ser utilizado fuera de la ATT en 1983. El nombre C++ es tambin de ese ao, y hace referencia al carcter del operador incremento de C (++). Ante la gran difusin y xito que iba obteniendo en el mundo de los programadores, la ATT comenz a estandarizarlo internamente en 1987. En 1989 se form un comit ANSI (seguido algn tiempo despus por un comit ISO) para estandarizarlo a nivel americano e internacional. En la actualidad, el C++ es un lenguaje verstil, potente y general. Su xito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de operadores y expresiones, flexibilidad, concisin y eficiencia. Adems, ha eliminado algunas de las dificultades y limitaciones del C original. La evolucin de C++ ha continuado con la aparicin de Java, un lenguaje creado simplificando algunas cosas de C++ y aadiendo otras, que se utiliza para realizar aplicaciones en Internet. Hay que sealar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de ste fueron tomadas del C++. En estas Notas se van a presentar los fundamentos del lenguaje C++ tradicional a partir del lenguaje C. Su descripcin se va a realizar en dos partes: una inicial en la que se contemplan las modificaciones y una posterior con los aadidos. El C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural se asemeja al C y es compatible con l, aunque ya se ha dicho que presenta ciertas ventajas (las modificaciones menores, que se vern a continuacin). Como lenguaje orientado a objetos se basa en una filosofa completamente diferente, que exige del programador un completo cambio de mentalidad. Las caractersticas propias de la Programacin Orientada a Objetos (ObjectOrientedProgramming, u OOP) de C++ son modificaciones mayores que s que cambian radicalmente su naturaleza.
los parntesis, todas las definiciones de funciones incluyen una lista de argumentos de entrada entre parntesis, en nuestro ejemplo es una lista vaca, es decir, nuestra funcin no admite parmetros.
que se la llam. El 0 es el valor de retorno de nuestra funcin. Cuando "main" retorna con 0 indica que todo ha ido bien. Un valor distinto suele indicar un error. Imagina que nuestro programa es llamado desde un fichero de comandos, un fichero "bat" o un "script". El valor de retorno de nuestro programa se puede usar para tomar decisiones dentro de ese fichero. Pero somos nosotros, los programadores, los que decidiremos el significado de los valores de retorno.
Analicemos cada parte de nuestro primer programa. #include <iostream.h> La parte del #include se refiere a la biblioteca de funciones que vamos a utilizar. Es decir para llamar a una biblioteca en particular debemos hacer lo siguiente: #include <librera_solicitada> El estndar de C++ incluye varias bibliotecas de funciones, y dependiendo del compilador que se est usando, puede aumentar el nmero. int main(void){
Este tipo de funcin la explicamos lneas atrs, la cual utiliza el mismo tipo de trascendencia del ejercicio anterior. cout<<hola mundo<<endl; Esta es una instruccin. La instruccin cout est definida dentro de la biblioteca iostream.h, que previamente declaramos que bamos a utilizar. Una funcin, en este caso main() siempre comienza su ejecucin con una instruccin (la que se encuentra en la parte superior), y contina as hasta que se llegue a la ltima instruccin (de la parte inferior). Para terminar una instruccin siempre se coloca ;. Pero adems de instrucciones se pueden invocar funciones definidas por el usuario (por supuesto diferentes de main) como se ver ms adelante.
CAPITULO 2- Operadores I
Los operadores son elementos que disparan ciertos clculos cuando son aplicados a variables o a otros objetos en una expresin. Existe una divisin en los operadores atendiendo al nmero de operandos que afectan. Segn esta clasificacin pueden ser unitarios, binarios o ternarios, los primeros afectan a un solo operando, los segundos a dos y los ternarios a siete, perdn!, a tres. Hay varios tipos de operadores, clasificados segn el tipo de objetos sobre los que actan.
Operadores aritmticos
Son usados para crear expresiones matemticas. Existen dos operadores aritmticos unitarios, '+' y '-' que tienen la siguiente sintaxis: + <expresin> - <expresin> Asignan valores positivos o negativos a la expresin a la que se aplican. En cuanto a los operadores binarios existen siete. '+', '-', '*' y '/', tienen un comportamiento anlogo, en cuanto a los operandos, ya que admiten enteros y de coma flotante. Sintaxis: <expresin> + <expresin> <expresin> - <expresin>
<expresin> * <expresin> <expresin> / <expresin> Evidentemente se trata de las conocidsimas operaciones aritmticas de suma, resta, multiplicacin y divisin, que espero que ya domines a su nivel tradicional, es decir, sobre el papel. El operador de mdulo '%', devuelve el resto de la divisin entera del primer operando entre el segundo. Por esta razn no puede ser aplicado a operandos en coma flotante. <expresin> % <expresin> Por ltimo otros dos operadores unitarios. Se trata de operadores un tanto especiales, ya que slo pueden trabajar sobre variables, pues implican una asignacin. Se trata de los operadores '++' y '--'. El primero incrementa el valor del operando y el segundo lo decrementa, ambos en una unidad. Existen dos modalidades, dependiendo de que se use el operador en la forma de prefijo o de sufijo. Sintaxis: <variable> ++ (post-incremento) ++ <variable> (pre-incremento) <variable>-- (post-decremento) -- <variable> (pre-decremento) En su forma de prefijo, el operador es aplicado antes de que se evale el resto de la expresin; en la forma de sufijo, se aplica despus de que se evale el resto de la expresin. Veamos un ejemplo, en las siguientes expresiones "a" vale 100 y "b" vale 10:
c=a+ ++b;
En este primer ejemplo primero se aplica el pre-incremento, y b valdr 11 a continuacin se evala la expresin "a+b", que dar como resultado 111, y por ltimo se asignar este valor a c, que valdr 111.
c=a+ b--;
En este segundo ejemplo primero se avala la expresin "a+b", que dar como resultado 110, y se asignar este valor a c, que valdr 110. Finalmente se aplica en post-decremento, y b valdr 9. Esto tambin proporciona una explicacin de por qu la versin mejorada del lenguaje C se llama C++, es simplemente el C mejorado o incrementado. Y ya que estamos,
el lenguaje C se llama as porque las personas que lo desarrollaron crearon dos prototipos de lenguajes de programacin con anterioridad a los que llamaron A y B.
Operadores de igualdad
Los operadores de igualdad son "==", (dos signos = seguidos) y "!=", que comprueban la igualdad o desigualdad entre dos valores aritmticos. Sintaxis: <expresin1> == <expresin2> <expresin1> != <expresin2> Se trata de operadores de expresiones lgicas, es decir, el resultado es "true" o "false". En el primer caso, si las expresiones 1 y 2 son iguales el resultado es "true", en el segundo, si las expresiones son diferentes, el "true". Nota: Cuando se hacen comparaciones entre una constante y una variable, es recomendable poner en primer lugar la constante, por ejemplo: if(123 == a) ... if(a == 123) ... Si nos equivocamos al escribir estas expresiones, y ponemos slo un signo '=', en el primer caso obtendremos un error del compilador, ya que estaremos intentando cambiar el valor de una constante, lo cual no es posible. En el segundo caso, el valor de la variable cambia, y adems el resultado de evaluar la expresin no depender de una comparacin, sino de una asignacin, y siempre ser "true", salvo que el valor asignado sea 0. Por ejemplo: if(a = 0) ... // siempre ser "false" if(a = 123)... // siempre ser "true", ya que 123 es distinto de 0. El resultado de evaluar la expresin no depende de "a" en ninguno de los dos casos, como puedes ver. En estos casos, el compilador, en el mejor de los casos, nos dar un "warning", o sea un aviso, pero compilar el programa. Nota: los compiladores clasifican los errores en dos tipos, dependiendo de lo serios que sean:
"Errores": son errores que impiden que el programa pueda ejecutarse, los programas con "errores" no pueden pasar de la fase de compilacin a la de enlazado, que es la fase en que se obtiene el programa ejecutable. "Warnings": son errores de poca entidad, (segn el compilador que, por supuesto, no tiene ni idea de lo que intentamos hacer). Estos errores no impiden pasar a la fase de enlazado, y por lo tanto es posible ejecutarlos. Debes tener ciudado si tu compilador de da una lista de "warnings", eso significa que has cometido algn error, en cualquier caso repasa esta lista e intenta corregir los "warnings". A su vez, los "enlazadores" o "linkers" tambin pueden dar errores, y normalmente estos son ms difciles de corregir.
Operadores lgicos
Los operadores "&&", "||" y "!" relacionan expresiones lgicas, formando a su vez nuevas expresiones lgicas. Sintaxis: <expresin1>&&<expresin2> <expresin1> || <expresin2> !<expresin> El operador "&&" equivale al "AND" o "Y"; devuelve "true" slo si las dos expresiones evaluadas son "true" o distintas de cero, en caso contrario devuelve "false" o cero. Si la primera expresin evaluada es "false", la segunda no se evala. Generalizando, con expresiones AND con ms de dos expresiones, la primera expresin falsa interrumpe el proceso e impide que se continuela evaluacin del resto de las expresiones. Esto es lo que se conoce como "cortocircuito", y es muy importante, como veremos posteriormente. El operador "||" equivale al "OR" u "O inclusivo"; devuelve "true" si cualquiera de las expresiones evaluadas es "true" o distinta de cero, en caso contrario devuelve "false" o cero. Si la primera expresin evaluada es "true", la segunda no se evala. El operador "!" es equivalente al "NOT", o "NO", y devuelve "true" slo si la expresin evaluada es "false" o cero, en caso contrario devuelve "true". La expresin "!E" es equivalente a (0 == E).
Operadores relacionales
Los operadores son "<", ">", "<=" y ">=", que comprueban relaciones de igualdad o desigualdad entre dos valores aritmticos. Sintaxis: <expresin1><<expresin2> <expresin1 ><<expresin2> <expresin1 <= <expresin2> <expresin1>>= <expresin2> Si el resultado de la comparacin resulta ser verdadero, se retorna "true", en caso contrario "false". El significado de cada operador es evidente: >mayor que <menor que >= mayor o igual que <= menor o igual que En la expresin "E1 <operador> E2", los operandos tienen algunas restricciones, pero de momento nos conformaremos con que E1 y E2 sean de tipo aritmtico. El resto de las restricciones las veremos cuando conozcamos los punteros y los objetos. Nota: Cuando decimos que operador es binario no quiere decir que slo se pueda usar con dos operandos, sino que afecta a dos operandos. Por ejemplo, la lnea: A = 1 + 2 + 3 - 4; Es perfectamente legal, pero la operacin se evaluar tomando los operandos dos a dos y empezando por la izquierda, y el resultado ser 2. Adems hay que mencionar el hecho de que los operadores tienen diferentes pesos, es decir, se aplican unos antes que otros, al igual que hacemos nosotros, por ejemplo: A = 4 + 4 / 4; Dar como resultado 5 y no 2, ya que la operacin de divisin tiene prioridad sobre la suma. Esta propiedad de los operadores es conocida como precedencia. En el captulo de operadores II se vern las precedencias de cada operador, y cmo se aplican y se eluden estas precedencias.