Você está na página 1de 53

Caractersticas, sintaxis y novedades del lenguaje de programacin C++

2013
Seccin A

El lenguaje de programacin C++ tuvo sus orgenes a mediados de los aos 80 diseado por Bjarne Stroustrup y surge con la intencin de extender el exitoso lenguaje de programacin C con mecanismos que permitan la manipulacin de objetos. En este sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje hbrido.

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Contenido
I. II. III. IV. V. VI. RESEA HISTRICA ........................................................................................................ 2 CARACTERSTICAS ...................................................................................................... 3 SINTAXIS ........................................................................................................................... 4 NOVEDADES ..................................................................................................................... 4 CONCLUSIONES ........................................................................................................... 51 BIBLIOGRAFA E-GRAFA ........................................................................................ 51

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

I. RESEA HISTRICA

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 exitoso lenguaje de programacin C con mecanismos que permitan la manipulacin de objetos. En ese sentido, desde el punto de vista de los lenguajes de programacin orientados a objetos, C++ es un lenguaje hibrido. 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. Actualmente existe un estndar denominado ISO C++, al que se han adherido la mayora de los fabricantes de compiladores ms modernos. Existen adems algunos intrpretes tales como ROOT. El nombre C++ fue propuesto por Rick Mascitti en el ao 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio cientfico. Antes se haba usado el nombre C con clases pero luego se cambi a C++ en el cual la expresin C++ significa incremento de C y se refiere a que C++ es una extensin de C. La historia del siguiente estndar de C++ bien podra llamarse la historia interminable. Lejos de esto, decir que C++ es simplemente un C con objetos es quedarse muy lejos de la realidad. A lo largo de los aos (y en sus dos estndares), se han ido aadiendo distintas funcionalidades que hacen ms potente al lenguaje (plantillas, sobrecarga de operadores, manejo de excepciones y otros. Y esta es su mayor virtud, y su mayor problema. La complejidad de C++ es muy alta debido al propio diseo del lenguaje y a todas las posibilidades que ofrece. Tanto que muchas empresas que lo usan deciden incluso obligar a usar solo un subconjunto del lenguaje para facilitar el desarrollo y sobretodo el mantenimiento de sus aplicaciones. Google, por ejemplo, descarta usar excepciones. El estndar de C++ se empez a desarrollar mucho tiempo ha, y como su propio nombre indica, se prevea que saldra durante la primera dcada de este siglo., por lo que siendo aprobado por la ISO queda ahora con el nombre C++11 el cual trae muchsimas novedades que se explicarn a continuacin.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

II. CARACTERSTICAS

El lenguaje de programacin en su versin C++11 trae consigo diferentes caractersticas que le han permitido establecer un estndar ISO lo cual lo hace confiable o con muchas fortalezas, hacindolo hoy por hoy uno de los lenguajes ms utilizados cuando a la hora de desarrollar programas para computadoras se refiere. A continuacin listaremos algunas de sus caractersticas ms importantes: Tiene un conjunto completo de instrucciones de control Permite la agrupacin de instrucciones Incluye el concepto de puntero (variable que contiene la direccin de otra variable) Los argumentos de las funciones se transfieren por su valor E/S no forma parte del lenguaje, sino que se proporciona a travs de una biblioteca de funciones Permite la separacin de un programa en mdulos que admiten compilacin independiente Tamao pequeo Uso extensivo de llamadas a funciones Comandos breves (poco tecleo) Lenguaje estructurado Programacin de bajo nivel (nivel bit) Implementacin de apuntadores - uso extensivo de apuntadores para la memoria, arreglos, estructuras y funciones El uso de constructores de alto nivel El poder manejar actividades de bajo-nivel El generar programas eficientes La posibilidad de poder ser compilado en una variedad de computadoras, con pocos cambios (portabilidad) Un punto en contra es que tiene una deteccin pobre de errores, lo cual en ocasiones es problemtico para los principiantes.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

III. SINTAXIS

C++ es considerado un C ms grande y potente. La sintaxis de C++ es una extensin de C, al que se han aadido numerosas propiedades, fundamentalmente orientada a objetos. ANSI C ya adopt numerosas caractersticas de C++, por lo que la migracin de C a C++ no suele ser difcil. En este apndice se muestran las reglas de sintaxis del estndar clsico de C++ recogidas en al Annotated Manual (ARM) de Stroustrup y Ellis, as como las ltimas propuestas incorporadas al nuevo borrador de C++ ANSI, que se incluyen en las versiones 3 (actual) y 4 (futura de AT&T C++). Elementos del lenguaje Un programa en C++ es una secuencia de caracteres que se agrupan en componentes lxicos (tokens) que comprenden el vocabulario bsico del lenguaje. Estos componentes de lxico son: palabras reservadas, identificadores, constantes, constantes de cadena, operadores y signos de puntuacin. Caracteres Los caracteres que se pueden utilizar para construir elementos del lenguaje (componentes lxicos o tokens) son: abcdefghijklmnopqrstuvwxyz ABCDEFCHIJKLMNOPQRSTUVWXYZ 0123456789 caracteres espacio (blancos y tabulaciones). Comentarios C++ soporta dos tipos de comentarios. Las lneas de comentarios al estilo C y C ANSI, tal como: /* Comentario estilo C */ /* Comentario ms extenso, pero tambin es estilo C y ANSI C */ El otro tipo de comentarios se pueden utilizar por los programadores de C++: La versin /*...* / se utiliza para comentarios que excedan una lnea de longitud y la versin //... se utiliza, slo, para comentarios de una lnea. Los comentarios no se anidan.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Identificadores Los identificadores (nombres de variables, constantes,...) deben comenzar con una letra del alfabeto (mayscula o minscula) o con un carcter subrayado, y pueden tener uno o ms caracteres. Los caracteres segundos y posteriores pueden ser: letras, dgitos o un subrayado, no permitindose caracteres no alfanumricos ni espacios. tescprueba // legal Xl23 // legal multi_palabra // legal var25 // legal l5var // no legal C++ es sensible a las maysculas. Paga_mes es un identificador distinto a paga_mes Una buena prctica de programacin aconseja utilizar identificadores significativos que ayudan a documentar un programa Ej. nombre apellidos salario precio_neto. Palabras reservadas Las palabras reservadas o claves no se deben utilizar como identificadores, debido a su significado estricto en C++; tampoco se deben redefinir. La Tabla B. 1 enumera las palabras reservadas de C++ segn el ARM(Siglas del libro de BJARNE STROUSTRUP en el que se definen las reglas de sintaxis del lenguaje C++ estndar).

Palabras reservadas de C++ asm* auto break case catch* char class* extern continue default delete* do double else enurn Long float for friend* goto if inline* int Short throw* new* signed operator* sizeof private* static protected* struct public* switch register template* return this* try typedef union unsigned virtual* void volatile

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Los diferentes compiladores comerciales de C++ pueden incluir, adems, nuevas palabras reservadas. Estos son los casos de Borland, Microsoft y Sysmantec. Palabras reservadas de Turbo/Borland C++ asm auto break case catch _cdecl _cdecl char class const continue _cs default delete do _double _ds else enum _es export extern far far float for friend goto huge if inline int interrup _loadds long _near near new operator pascal pascal private protected pubic register return _saveregs _seg short signed sizeof _ss static struct switch template this typedef union unsigned virtual void volatile while

El comit ANSI ha aadido nuevas palabras reservadas

Nuevas palabras reservadas de ANSI C++ bool false reinterpretcast cons_cast mutable static_cast dynamic_cast namespace true

typeid using wchart

Tipos de datos Los tipos de datos simples en C++ se dividen en dos grandes grupos: integrales (datos enteros) y de coma flotante (datos reales). La siguiente tabla muestra los diferentes tipos de datos en C++.

char short usigned float

Tabla Tipos de datos simples en C++ signed char unsigned char int long short unsigned unsigned long double long double

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Los tipos derivados en C++ pueden ser: enumeraciones (enum) estructuras (struct) uniones (union) arrays clases (class y struct) uniones y enumeraciones annimas punteros

Verificacin de tipos La verificacin o comprobacin de tipos en C++ es ms rgida (estricta) que en C. Algunas consideraciones a tener en cuenta son: Usar funciones declaradas. Esta accin es ilegal en C++, y est permitida en C: int main() { //... printf(x) //C int printf(x) //C++ es ilegal, ya que printf no est declarada return 0; } Fallo al devolver un valor de una funcin. Una funcin en C++ declarada con un tipo determinado de retomo, ha de devolver un valor de ese tipo. En C, est permitido no seguir la regla. Asignacin de punteros void. La asignacin de un tipo void* a un puntero de otro tipo se debe hacer con una conversacin explcita en C++. En C, se realiza implcitamente. Inicializacin de constantes de cadena. En C++ se debe proporcionar un espacio para el carcter de terminacin nulo cuando se inicializan constantes de cadena. En C, se permite la ausencia de ese carcter int main() { //...... char car[7] = Cazorla;

// legal en C //error en C++

//...... return 0; } Una solucin al problema que funciona tanto en C como en C++ es: char car [] ="Cazorla";

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Constantes C++ contiene constantes para cada tipo de dato simple (integer, char,...). Las constantes pueden tener dos sufijos, u, l y f. Que indican tipos unsigned, long y float, respectivamente. As mismo, se pueden aadir los prefijos o y ox, que representan constantes octales y hexadecimales. 456 0456 0x476 // constante enteras : decima1, octal , hexadecimal 1231 123ul // constante enteras :long, unsigned, long B b 4 // constante de tipo char 3.1415f // constante reales de diferente posicin cadena de caracteres // Constante de cadena Las cadenas de caracteres se encierran entre comillas, y las constantes de un solo carcter se encierran entre comillas simples. // cadena vaca \0

Declaracin de constantes En C++, los identificadores de variables/constantes se pueden declarar constantes, significando que su valor no se puede modificar. Esta declaracin se realiza con la palabra reservada const. contar double PI= 3.11416; const char BLANCO = ; const double PI_EG = -I; const double DOBLE_I = 2 * PI ; El modificador de tipos const se utiliza en C++, tambin para proporcionar proteccin de slo lectura para variables y parmetros de funciones. Las funciones miembro de una clase que no modifican los miembros dato a que acceden pueden ser declarados const. Este modificador evita tambin que parmetros por referencia sean modificados: void copy (const char * fuente, char * destino):

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Conversin de tipos Las conversiones explcitas se fuerzan mediante moldes (casts). La conversin forzosa de tipos de C tiene el formato clsico: (tipo) expresin. C++ ha modificado la notacin anterior por una notacin funcional como alternativa sintctica: nombre del tipo (expresion) Las notaciones siguientes son equivalentes: float(x); //notacion de casteo en C++ (float)x; //notacion de casteo en C.

Declaracin de variables En ANSI C, todas las declaraciones de variables y funciones se deben hacer al principio del programa o funcin. Si se necesitan declaraciones adicionales, el programador debe volver al bloque de declaraciones al objeto de hacer los ajustes o inserciones necesarios. Todas las declaraciones deben hacerse antes de que se ejecute cualquier sentencia. As, la declaracin tpica en C++, NombreTipo Nombrevariable1, Nombrevariable2; proporciona declaraciones tales como: int saldo, meses; double clipper, salario; Al igual que en C, se pueden asignar valores a las variables en C++: int mes =4, dia, anio=1995; doble salario = 45.675; En C++, las declaraciones de variables se pueden situar en cualquier parte de un programa. Esta caracterstica hace que el programador declare sus variables en la proximidad del lugar donde se utilizan las sentencias de su programa. El siguiente programa es legal en C++ pero no es vlido en C: #include <stdio.h> int main () { int i ; for ( i= 0; i<100; ++i) printf ( %d\n , i); double j; for ( j= 1.7547; j<25.4675; j+= .001) printf ( %lf\n , j); } El programa anterior se podra reescribir, haciendo la declaracin y la definicin dentro del mismo bucle: int main () { for ( int i= 0; i<100; ++i) cout<< i << endl; for ( int j= 1.7547; j<25.4675; j+= .001) cout << j <<; }

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

10

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Operadores C++ es un lenguaje muy rico en operadores. Se clasifican en los siguientes grupos: Aritmticos. Relacionales y lgicos. Asignacin. Acceso a datos y tamao. Manipulacin de bits. Varios. Como consecuencia de la gran cantidad de operadores, se producen tambin una gran cantidad de expresiones diferentes.

Operadores aritmticos C++ proporciona diferentes operadores que relacionan operaciones aritmticas. Operadores aritmticos en C++ Operador Nombre Propsito Ejemplo + Ms Unitario Valor positivo de x x= +y, +5 Negacin Valor negativo de x x= -y + Suma Suma x e y z= x+y Resta Resta y de x z= x-y * Multiplicacin Multiplica x por y z= x*y / Divisin Divide x por y z= x/y % Mdulo Resto de divisin z= x%y ++ Incremento Incrementa x despus de usar x++ -Decremento Decrementa x antes de usar --x

Ejemplo: -i // menos unitario +w; // ms unitario a * b // multiplicacin b / c // divisin a % t; // modulo a+ b // suma a - b // resta int a = 5/2; // a toma el valor 2, porque a es entero float b = 5/2; // b toma el valor 2.5, porque b es real

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

11

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Los operadores de incremento y decremento sirven para incrementar y decrementar en uno los valores almacenados en una variable. variable ++ // postincremento ++variable1e // preincremento variable -- // postdecremento --variable //predecremento ++a o a++; equivale a a=a+1; --b o b--; equivale a b=b1; Los formatos postfijos se conforman de modo diferente segn la expresin en que se aplica. a=++a; equivale a a=a+1; b=a; b=a--; equivale a b=a; a=a-1; int i; j, k = 5; k++; // k vale 6, igual efecto que ++k --k; // k vale ahora 5, igual efecto que k i=4*k++; // k es ahora 6 e i es 20 k=5; j=4*++k; // k es ahora 6 e i es 24 Operadores de asignacin El operador de asignacin (=) hace que el valor situado a la derecha del operador se adjudique variable situada a su izquierda. La asignacin suele ocurrir como parte de una expresin de asignacin y las conversiones se producen implcitamente. z = b + 5; // asigne (b + 5) a variable z C++ permite asignaciones mltiples en una sola sentencia. As: a = b + (c=l0); equivale a: c = 10; a = b + c; C++ proporciona operadores de asignacin que combinan operadores de asignacin y otros diferentes, produciendo operadores tales como +=, /=, -=, *= y %= . C++ soporta otros de operadores de asignacin para manipulacin de bits.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

12

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Operadores lgicos y relacionales Los operadores lgicos y relacionales son los bloques de construccin bsicos para constructores de toma de decisin en un lenguaje de programacin. La siguiente tabla muestra los operadores lgicos y relacionales:

Operador && || ! < <= > >= == != ?

Operadores lgicos y relacionales Descripcin Ejemplo AND (y) lgico a && b OR (o) lgico c || b NOT (no) lgico !c Menor que i<c Menor o igual que i<=0 Mayor que j>50 Mayor o igual que j>=8.5 Igual a x==\0 No igual a c!=\n Asignacin condicional K=(i<5) ? i=1;

El operador ?: se conoce como expresin condicional, La expresin condicional es una abreviatura de la sentencia condicional if_else. La sentencia if if(condicion) variable = exprexion1; else variable = exprexion2; es equivalente a variable=(condicion) ? expresion1:expresion2; La expresin condicional comprueba la condicin. Si esa condicin es verdadera, se asigna expresion1 a variable; en caso contrario, se asigna expresion2 a variable.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

13

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Reglas prcticas Los operadores lgicos y relacionales actan sobre valores lgicos el valor/es puede ser o bien 0, o bien el puntero nulo, o bien 0.0; el valor verdadero puede ser cualquier valor distinto de cero. La siguiente tabla muestra los resultados de diferentes expresiones. x> y x >= y x< y x <= y x == y x != y !x x || y distinto a 0 si x excede a y, sino 0 distinto a 0 si x es mayor o igual a y,sino 0 distinto a 0 si x es menor que y, sino 0 distinto a 0 si x es menor que o igual a y, sino 0 distinto a 0 si x es igual a y, sino 0 distinto a 0 si x e y son distintos, sino 0 distinto a 0 si x es 0,sino 0 0 si ambos x e y son 0, sino distinto a 0

Evaluacin en cortocircuito C++, igual que C, admite reducir el tiempo de las operaciones lgicas; la evaluacin de las expresiones se reduce cuando alguno de los operandos toma valores concretos.

Operacin lgica AND (&&) Si en la expresin expr1 && expr2, expr1 toma el valor cero y la operacin lgica AND (y) siempre ser cero, sea cual sea el valor de expr2. En consecuencia, expx2 no se evaluar nunca. Operacin lgica OR (II). Si expr1 toma un valor distinto de cero, la expresin expr1 || expr2 se evaluar a 1, cualquiera que sea el valor de expr2; en consecuencia, expr2 no se evaluar.

Operaciones de manipulacin de bits C++ proporciona operadores de manipulacin de bits, as como operadores de asignacin de manipulacin de bits. Operadores de manipulacin de bits (bitwise) Descripcin Ejemplo AND bit a bit x & 128 OR bit a bit j | 64 XOR bit a bit j^2 NOT bit a bit ~j Desplazar a la izquierda (mult. Por 6) i << 3 Desplazar a la derecha (div. Por 8) j >> 4

Operador & | ^ ~ << >>

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

14

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Operador &= |= ^= << >> ~x y&y x|y x << x x >> x

Operadores de asignacin de manipulacin de bits Formato largo Formato corto x=x&y x & = y; x=x|y x | = y; x=x^y x^ = y x = x << y x << = y; x = x >> y x >> = y; Ejemplo Cambia los bits 1 a 0 y los bits 0 a 1 Operacin lgica AND (y) bit a bit de x e y Operacin lgica GR (o) bit a bit de x e y se desplaza a la izquierda (en y posiciones) se desplaza a la derecha (en y posiciones)

Operdor sizeof El operador sizeof proporciona el tamao en bytes de un tipo de dato o variable sizeof toma el argumento correspondiente (tipo escalar, array, record, etc.). La sintaxis del operador es: sizeof (nombre variable | tipo de dato) Ejemplo: int m , n[12] sizeof(m) // proporciona 4, en mquinas de 32 bits sizeof(n) // proporciona 48 sizeof (15) // proporciona 4 sizeof (int) // da el tamao en memoria de un int (generalmente 32 bits).

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

15

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Prioridad y asociatividad de operadores Cuando se realizan expresiones en las que se mezclan operadores diferentes es preciso establecer una precedencia (prioridad) de los operadores y la direccin (o secuencia) de evaluacin (orden de evaluacin: izquierda-derecha, derechaizquierda), denominada asociatividad. .-- ++ ++ -& (direccin) ~ (tipo) - + sizeof (tipo) new delete * (indireccion) .* ->* Izquierda-Derecha */% + << >> < <= > >= = = = & ^ | && || Ejemplo: a * b/c+d equivale a (a * b ) / ( c + d ) Izquierda-Derecha Izquierda-Derecha Izquierda-Derecha Izquierda-Derecha Izquierda-Derecha Izquierda-Derecha Izquierda-Derecha Izquierda-Derecha Izquierda-Derecha Izquierda-Derecha Derecha-Izquierda

Izquierda-Derecha

Sobrecarga de operadores La mayora de los operadores de C++ pueden ser sobrecargados o redefinidos para trabajar con nuevos tipos de datos. A continuacin se muestran los operadores que pueden ser sobrecargados. + - * / % ^ & | ~ ! = < > >> << >>= <<= != == ( ) -> , []

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

16

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Entradas y salidas bsicas Al contrario que muchos lenguajes, C++ no tiene facilidades incorporadas para manejar entrada o salida. En su lugar, se manejan por rutinas de bibliotecas. Las clases que C++ utiliza para entrada y salida se conocen como flujos. Un flujo (stream) es una secuencia de caracteres junto con una coleccin de rutinas para insertar caracteres en flujos (a pantalla) y extraer caracteres de un flujo (de teclado). Salida El flujo cout es el flujo de salida estndar que corresponde a stdout en C. Este flujo se deriva de la clase ostream construida en iostream. CPU Entrada binaria cout Salida de caracteres Pantalla

Uso de flujos para salida de caracteres. Si se desea visualizar el valor del objeto int llamado i, se escribe la sentencia: cout << i; El siguiente programa visualiza en pantalla una frase: #include <iostream.h> { cout << Hola Mundo\n; } int main()

Las salidas en C++ se pueden conectar en cascada, con una facilidad de escritura mayor que en C. #include <isostrean.h>. int main() { int i; i = 1099; cout << El valor de i es << i << \n; }

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

17

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Otro programa que muestra la conexin en cascada es: #include <iostream.h> int main(){ int x = 45; double y = 496.125; char *c = "y es multiplicada por x="; cout << c << y * x << "\n; } Entrada La entrada se maneja por la clase istream. Existe un objeto predefinido istream, llamado cin, que se refiere al dispositivo de entrada estndar (el teclado). El operador que se utiliza para obtener un valor del teclado es el operador de extraccin >>. Por ejemplo, si i era un objeto int, se escribir: cin >> i; Que obtiene un nmero del teclado y lo almacena en la variable i. Un programa simple que lee un dato entero y lo visualiza en pantalla es: #include <iostream.h> int main()i { cin >> i; cout << i;

int i; }

Al igual que en el caso de cout, se pueden introducir datos en cascada: #include <iostream.h> int main() { char c[60]; int x,y; cin >> c >> x >> y; cout << c << << x << << y << \n; }

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

18

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Manipuladores Un mtodo fcil de cambiar la anchura del flujo y otras variables de formato es utilizar un operador especial denominado manipulador. Un manipulador acepta una referencia de flujo como un argumento y devuelve una referencia al mismo flujo. El siguiente programa muestra el uso de manipuladores especficamente para conversiones de nmero (dec, oct, y hex): #include <iostream.h> int main () { int i = 36; cout << dec << i << oct << i << << hex << i << \n; } La salida de este programa es: 36 44 24 Otro manipulador tpico es endl, que representa al carcter de nueva lnea (salto de lnea), es equivalente a \ n . El programa anterior se puede escribir tambin as: #include <iostream.h> int main () { int i = 36; cout << dec << i << oct << i << hex << i << endl; } Sentencias Un programa en C++ consta de una secuencia de sentencias. Existen diversos tipos de sentencias. El punto y coma se utiliza como elemento terminal de cada sentencia. Sentencia de declaracin Se utilizan para establecer la existencia y, opcionalmente, los valores iniciales de objetos identificados por nombre. nombreTipo identificador, ; nombreTipo identificador = expresin, ; const NombreTipo identificador = expresin, ; Algunas sentencias vlidas en C++ son: char cl; int p, q = 5, r =a + b; //suponiendo que a y b han sido declaradas e inicializadas antes const double IVA = 16.0;

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

19

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Sentencias expresin Las sentencias de expresiones hacen que la expresin sea evaluada. Su formato general es: expresin; Ejemplo: n++; 425; a + b; a += b = 3; // legal, pero no hace nada // legal, pero no hace nada n = a < b || b != 0; // sentencia compleja

C++ permite asignaciones mltiples en una sentencia. m = n + (p=5) equivale a p=5; m = n + p ; Sentencias compuestas Una sentencia compuesta es una serie de sentencias encerradas entre llaves. Las sentencias compuestas tienen el formato: { sentencia sentencia sentencia .... } Las sentencias encerradas pueden ser cualquiera: declaraciones, expresiones, sentencias compuestas, etc. Un ejemplo es: int i = 5; double x = 3.14, y = -4.25; int j = 4 - i x = 4.5 * (x - y);

El cuerpo de una funcin C++ es siempre una sentencia compuesta. Sentencias condicionales: if if (expresion) if (expresion){ sentencia <secuencia de sentencias> } Si expresin es verdadera (distinta de cero), entonces se ejecuta sentencia o secuencia de sentencias; en caso contrario, se salta la sentencia. Despus que la sentencia if se ha ejecutado, el control pasa a la siguiente sentencia:

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

20

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Ejemplo 1: if ( a < 0 ) negativos++; Si la variable a es negativa, se incrementa la variable negativos. Ejemplo 2: if ( numerodedias < 0 ) numerodedias = 0; if ( (altura - 5) < 4 ) { area = 3.14 * radio * radio; volumen = area * altura; } Ejemplo 3: if ( numero == 0 ) cout << No se calculara la media; else media = total / numero; Ejemplo 4: if (cantidad > 10) { descuento = 0.2; precio = cantidad * precio * (1 - descuento); } else { descuento = 0; precio = cantidad * precio; } Sentencias if_else anidadas C++ permite anidar sentencias if_else para crear una sentencia de alternativa mltiple: if (expresionl) sentencial; {sentencia compuesta} else if (expresion2) sentencia2; ) {sentencia compuesta} else if (expresion N) sentencia N; {sentencia compuesta} [else sentencia N + 1; {sentencia compuesta}] Ejemplo: if (a > 100) if (b <= 0) sumap = 1; else suman = 1; else numero = 1;

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

21

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Sentencias de alternativa mltiple: switch La sentencia switch ofrece una forma de realizar decisiones de alternativas mltiples. El formato de switch es: switch (expresion) { case constante 1: sentencias break; case constante 2: sentencias .break; case constante n: sentencias break; default: //opcional sentencias } La sentencia switch requiere una expresin cuyo valor sea entero. Este valor puede ser una constante, una variable, una llamada a funcin o una expresin. El valor de constante ha de ser una constante. Al ejecutar la sentencia se evala expresin y si su valor coincide con una constante se ejecutan las sentencias a continuacin de ella, en caso contrario se ejecutan las sentencias a continuacin de default. switch (puntos) { case 10: nota = a; break; case 9: nota =5; break; case 7,8: nota = c; break; case 5.6: nota = d; break; default: nota = f; }

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

22

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Bucles: Sentencias repetitivas Los bucles sirven para realizar tareas repetitivas. En C++, existen tres diferentes tipos de sentencias repetitivas:

while do for

Sentencia while La sentencia while es un bucle condicional que se repite mientras la condicin es verdadera. El bucle while nunca puede iterar si la condicin comprobada es inicialmente falsa. La sintaxis de la sentencia while es: while (expresin) sentencia; o bien: while (expresin) { < secuencia de sentencias > }

Ejemplo Int n, suma = 0 Int i = 1 While (i <=100) Cout << Entrar; cin>> n; Suma += n; i++; } Cout <<La media es <<double(suma) /100.0; Sentencia do La sentencia do acta como la sentencia while. La nica diferencia real es que la evaluacin y la prueba de salida del bucle se hace despus que el cuerpo del bucle se ha ejecutado, en lugar de antes. El formato es: do { sentencias }while (expresin); sentencia siguiente Se ejecuta sentencia y a continuacin se evala expresin y, si es verdadero (distinto de cero), el control se pasa de nuevo al principio de la sentencia do y el proceso se repite, hasta que expresin es falso(cero) y el control pasa a la sentencia siguiente.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

23

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Ejemplo 1: int n, suma=0, i = 1; do { cout << entrar; cin >> n; suma += n; i++; } while ( i <= 100) cout << La media es << double (suma)/100.0; Ejemplo 2: El siguiente ejemplo visualiza los cuadrados de 2 a 10: int i=2; do cout << i << 12 = << i * i++ << endl ; while (i < 11);

La sentencia for Una sentencia for ejecuta la iteracin de un bucle un nmero determinado de veces. for tiene tres componentes: expresion1, inicializa las variables de control del bucle; expresion2, es la condicin que determina si el bucle realiza otra iteracin; la ltima parte del bucle for es la clusula que incrementa o decrementa las variables de control del bucle. El formato general de for es: for (expresionl; expresion2; expresion3) sentencia; <secuencia de sentencias>; expresionl se utiliza para inicializar la variable de control de bucle; a continuacin expresion2 se evala, si es verdadera (distinta de cero), se ejecuta la sentencia y se evala expresion3 y el control pasa de nuevo al principio del bucle. La iteracin contina hasta que expresion2 es falsa (cero), en cuyo momento el control pasa a la sentencia siguiente al bucle.

Ejemplos: for (int i = 0; i < 5; i++) // se realizan 5 iteraciones sentenciales Suma de 100 nmeros int o, suma = 0; for (int i = 0; i < 100; i++) { cout <<Entrar; } cin >> n; suma+=n:

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

24

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Sentencias break y continue El flujo de control ordinario de un bucle se puede romper o interrumpir mediante las sentencias break y continue. La sentencia break produce una salida inmediata del bucle flor en que se encuentra situada: for (i = 0; i < 100; i++) { cin X; if (x < 0.0) { cout <<salir del bucle <<endl; break; } cout << sqrt(x)<< endl; } La sentencia break tambin se utiliza para salir de la sentencia switch. La sentencia continue termina la iteracin que se est realizando y comenzar de nuevo la siguiente iteracin: for (i = 0; i < 100; ++i) { cin >> x; if (x < 0.0) continue; } Advertencia:

Una sentencia break puede ocurrir nicamente en el cuerpo de una sentencia for, while, do o switch. Una sentencia continue slo puede ocurrir dentro del cuerpo de una sentencia for, while o do. Sentencia nula La sentencia nula se representa por un punto y coma, y no hace ninguna accin. char cad[80]=Cazorla; int i; for (i = 0; cad[i] != \0; i++);

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

25

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Punteros (Apuntadores) Un puntero o apuntador es una referencia indirecta a un objeto de un tipo especificado. En esencia, un puntero contiene la posicin de memoria de un tipo dado. Declaracin de punteros Los punteros se declaran utilizando el operador unitario*. En las sentencias siguientes se declaran dos variables: n es un entero, y p es un puntero a un entero. int n; // es un tipo de dato entero int *p; // p es un puntero a un entero

Una vez declarado un puntero, se puede fijar la direccin o posicin de memoria del tipo al que apunta. p = &n; //p se fija a la direccin de a Un puntero se declara escribiendo: NombreTipo * Nombre Variable Una vez que se ha declarado un puntero, p el objeto al que apunta se escribe *p y se puede tratar como cualquier otra variable de tipo NombreTipo. int *p, *q, o; // dos punteros a int, y un int *P = 101; // *p a 101 *q= n + *p; // *q a n mas el contenido de lo que apunta p C++ trata los punteros a tipos diferentes como tipos diferentes, int *ip; double *dp; Los punteros ip y dp son incompatibles, de modo que es un error escribir: dp = ip; Se pueden, sin embargo, realizar asignaciones entre contenidos, ya que se realizara una conversin explcita de tipos: *dp =ip

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

26

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Existe un puntero especial (nulo) que se suele utilizar con frecuencia en programas C++. El puntero NULL tiene un valor cero, que lo diferencia de todas las direcciones vlidas. El conocimiento nos permite comprobar si un puntero p es el puntero NULL evaluando la expresin (p==0). Los punteros NULL se utilizan slo como seales de que ha sucedido algo. En otras palabras, si p es un puntero NULL, es incorrecto referenciar *p. Punteros a arrays A los arrays se accede a travs de los ndices: int lista [5]; lista [3] = 5; Sin embargo, tambin se puede acceder a travs de punteros: int lista [5]; //array de 5 elementos int *ptr; //puntero a entero ptr = lista; //fija puntero al primer elemento del array ptr =+ 3; //suma 3 a por; ptr apunta al 4to elemento *ptr = 5; //establece el 4to elemento a 5. El nombre de un array se puede utilizar tambin como si fuera un puntero al primer elemento del array. double a [10]; double *p = a; // p y a se refieren al mismo array

Este elemento se puede llamar por. a[10], p ;o bien p[0]

Este elemento se puede llamar por: a[6], *(p + 6): o bien p[0]

Si nombre apunta al primer elemento del array, entonces nombre + 1 apunta al segundo elemento. El contenido de lo que se almacena en esa posicin se obtiene por la expresin:*(nombre + 1). Aunque las funciones no pueden modificar sus argumentos, si un array se utiliza como un argumento de una funcin, la funcin puede modificar el contenido del array.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

27

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Punteros a estructuras Los punteros a estructuras son similares y funcionan de igual forma que los punteros a cualquier otro tipo de dato. struct familia { char marido[100]; char esposa[100]; char hijo[100]; } familia Mackoy; //Mackoy estructura de tipo familia struct familia *p; //p, un puntero a familia p = &Mackoy; //p, contiene direccin de mackoy strcpy (p->marido,Luis Mackoy); //inicializacin strcpy (p ->esposa, Vilma Conzalez); //inicializacin strcpy (p ->hijo, Luisito Mackoy); //inicializacin Punteros a objetos constantes Cuando se pasa un puntero a un objeto grande, pero se trata de que la funcin no modifique el objeto (por ejemplo, el caso de que slo se desea visualizar el contenido de un array), se declara el argumento correspondiente de la funcin como puntero a un objeto constante. La declaracin: const NombreTipo *v establece v como un puntero a un objeto que no puede ser modificado. Un ejemplo puede ser: void Visualizar(const ObjetoGrande *v); Punteros a void El tipo de dato void representa un valor nulo. En C++, sin embargo, el tipo de puntero void se suele considerar como un puntero a cualquier tipo de dato. La idea fundamental que subyace en el puntero void en C++ es la de un tipo que se puede utilizar adecuadamente para acceder a cualquier tipo de objeto, ya que es ms o menos independiente del tipo. Un ejemplo ilustrativo de la diferencia de comportamiento en C y C++ es el siguiente segmento de programa: int main() { void *vptr; int *iptr; vptr = iptr; iptr = vptr; //Incorrecto en C++, correcto en C iptr = (int *) vprr; //Correcto en C++ }

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

28

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Punteros y cadenas Las cadenas en C++ se implementan como arrays de caracteres, como constantes de cadena y como punteros a caracteres. Constantes de cadena Su declaracin es similar a char *cadena = Mi profesor; o bien su sentencia equivalente char varcadena[ ] = Mi profesor; Si desea evitar que la cadena se modifique, aada const a la declaracin: const char *varcadena = M profesor; Los puntos a cadena se declaran: char s[1] o bien: char *s Punteros a cadenas Los punteros a cadenas no son cadenas. Los punteros que localizan el primer elemento de una cadena almacenada. char *varCadena; const char *cadenafija; Consideraciones prcticas Todos los arrays en C++ se implementan mediante punteros: char cadenal[l6] = Concepto Objeto; char * cadena2 = cadenal; Las declaraciones siguientes son equivalentes y se refieren al carcter C: cadenal[0] = a; char car = a; cadena1[0] = car; Aritmtica de punteros Dado que los punteros son nmeros (direcciones), pueden ser manipulados por los operadores aritmticos. Las operaciones que estn permitidas sobre punteros son: suma, resta y comparacin. As, si las sentencias siguientes se ejecutan en secuencia: char *p; // p, contiene la direccin de un carcter char a[l0]; // array de diez caracteres p = &a[0]; // p, apunta al primer elemento del array p++; // p, apunta al segundo elemento del array p++; // p, apunta al tercer elemento del array p--; // p, apunta al segundo elemento del array

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

29

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Un elemento de comparacin de punteros, es el siguiente programa: #include <iostream.h> main (void) { int *ptr1, *ptr2; int a[2] = {l0,l0}; ptrl = a; cout << ptr1 es << ptr1 << *ptr1 es << *ptr1 << endl; cout << ptr2 es << ptr2 << *ptr2 es << *ptr2 << endl; //comparar dos punteros if (*ptrl == *ptr2) cout << ptr1 es igual a *ptr2 \n; else cout << *ptrl no es igual a *ptr2 \n; } Los operadores New y Delete C++ define un mtodo para realizar asignacin dinmica de memoria, diferente del utilizado en mediante los operadores new y delete. El operador new sustituye a la funcin malloc tradicional en C, y el operador delete sustituye a la funcin free tradicional, tambin en C. new, asigna memoria, y devuelve un puntero al new Nombre Tipo y un ejemplo de su aplicacin es: int *ptrl double *ptr2; ptrl = new int; // memoria asignada para el objeto ptrl ptr2 = new double; // memoria ampliada para el objeto ptr2 *ptrl = 5; *ptr2 = 6.55; Dado que new devuelve un puntero, se puede utilizar ese puntero para inicializar el puntero de una sola definicin, tal como: int* p = new int; Si new no puede ocupar la cantidad de memoria solicitada devuelve un valor NULL. El operador delete libera la memoria asignada mediante new. delete prt1; Un pequeo programa que muestra el uso combinado de new y delete es: include <iostream.h> void main (void) { char *c; c = new char[512]; cin >> c; cout << c <<endl; delete [] c; }

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

30

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Los operadores new y delete se pueden utilizar para asignar memoria a arrays, clases y otro tipo de datos. int *i i = new int[2][35]; delete i; //crear el array de 2 x 35 dimensiones //asignar el array //destruir el array

Sintaxis de new y delete new nombre-tipo new int new char[l00] new nombre-tipo nicializador new int(99) new char(C) new nombre-tipo new (char*) delete expresin delete p delete[] expresin delete []p Arrays Un array (matriz, tabla o arreglo) es una coleccin de elementos dados del mismo tipo que se identifican por medio de un ndice. Los elementos comienzan con el ndice 0. Declaracin de arrays Una declaracin de un array tiene el siguiente formato: nombreTipo nombreVariable [n] Algunos ejemplos de arrays unidimensionales: int ListaNum[2] ; char ListaNombres[l0]; //array de dos enteros //array de 10 caracteres

Arrays multidimensionales son: nombretipo nombreVariabie[nl] [n2] ... [nx];

El siguiente ejemplo declara un array de enteros 4 x 10 x 3 int multidim [4] [10] [3]; El ejemplo tabla declara un array de 2 x 3 elementos int tabla [2][3]; //array enteros de 2 x 3 = 6 elementos

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

31

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Definicin de arrays Los arrays se inicializan con este formato: int a[3] = {5, 10, 15}; char cad[5] = {a, b , c, d, e}; int tabla [2][3] = {{l,2,3} {3,4,5}}; Las tres siguientes definiciones son equivalentes: char saludo [5] = hola; char saludo [] = hola; char saludo [5] = {h, o, l, a} Los arrays se pueden pasar como argumentos a funciones. Las funciones no pueden devolver arrays. No est permitida la asignacin entre arrays. Para asignar un array a otro, se debe escribir el cdigo para realizar las asignaciones elemento a elemento. Enumeraciones, estructuras y uniones En C++, un nombre de una enumeracin, estructura o unin es un nombre de un tipo. Por consiguiente, la palabra reservada struct, union, o enum no son necesarias cuando se declara una variable. El tipo de dato enumerado designa un grupo de constantes enteros con nombres. La palabra reservada enum se utiliza para declarar un tipo de dato enumerado o enumeracin. La sintaxis es: enum nombre { lista-simbolos } donde nombre es el nombre de la variable declarada enumerada, LISTASIMBOLOS es una lista de tipos enumerados, a los que se asigna valores cuando se declara la variable enumerada y puede tener un valor de inicializacin. Se puede utilizar el nombre de una enumeracin para declarar una variable de ese tipo (variable de enumeracin). Ej: nombre ver; Considrese la siguiente sentencia: enum color [Rojo, Azul, Verde, Amarillo]; Una variable de tipo enumeracin color es: color pantalle = Rojo; //Estilo C++

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

32

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Una estructura es un tipo de dato compuesto que contiene una coleccin de elementos de tipos de datos diferentes combinados en una nica construccin del lenguaje. Cada elemento de la coleccin se llama miembro y puede ser una variable de un tipo de dato diferente. Una estructura representa un nuevo tipo de dato en C++. La sintaxis de una estructura es: struct nombre { miembros }; Un ejemplo y una variable tipo estructura se muestran en las siguientes sentencias: struct cuadro { int i; float f; }; struct cuadro nombre; //Estilo C cuadro nombre; //Estilo C++ Una unin es una variable que puede almacenar objetos de tipos y tamaos diferentes. Una unin puede almacenar tipos de datos diferentes, slo puede almacenar uno cada vez, en oposicin a una estructura que almacena simultneamente una coleccin de tipos de datos. La sintaxis de una unin es: union nombre { miembros }; Un ejemplo de una unin es: union alfa { int x; char o; }; Una declaracin de una variable estructura es: alfa w; El modo de acceder a los miembros de la estructura es mediante el operador punto. u.x = 145; u.c = z;

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

33

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

C++ admite un tipo especial de unin llamada unin annima, que declara un conjunto de miembros que comparten la misma direccin de memoria. La unin annima no tiene asignado un nombre y, en consecuencia, se accede a los elementos de la unin directamente. La sintaxis de una unin annima es: union { int nuevolD; int contador; } Las variables de la unin annima comparten la misma posicin de memoria y espacio de datos. int main() { union { int x; float y; double z; } x = 25; y = 245.245; //el valor en y sobreescribe el valor de x z = 9.41415; //el valor en z sobreescribe el valor de z } Cadenas Una cadena es una serie de caracteres almacenados en bytes consecutivos de memoria. Una cadena se puede almacenar en un array de caracteres (char) que tenan en un carcter nulo (cero): char perro[5] = { `m`,`o`,`r`,`g`,`a`,`n`} // no es una cadena char gato[5] = { f,e,l,i,n,o,\0,}; // es una cadena

Lectura de una cadena del teclado #include <iostream.h> main () { char cad [80]; cout << introduzca una cadena:; // lectura del teclado cm cad; cin >> cad; cout << Su cadena es:; cout << cad; return 0; }

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

34

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Esta lectora del teclado lee una cadena hasta que se encuentra el primer carcter blanco. As, cuando se lee Hola que tal la primera cadena, en cad slo se almacena Hola. Para resolver el problema, utilizar la funcin gets () que lee una cadena completa leda del teclado. El programa anterior quedara as: #include <iostream.h> #include <stdio.h> main() { char cad[80]; cout Introduzca una cadena:; gets (cad); cout Su cadena es:; cout << cad; return 0; } Funciones Una funcin es una coleccin de declaraciones y sentencias que realizan una tarea nica. Cada funcin tiene cuatro componentes: (1) su nombre, (2) el tipo de valor que devuelve cuando termina su tarea, (3) la informacin que toma al realizar su tarea, y (4) la sentencia o sentencias que realizan su tarea. Cada programa C++ tiene al menos una funcin: la funcin main. Declaracin de funciones En C++, se debe declarar una funcin antes de utilizarla. La declaracin de la funcin indica al compilador el tipo de valor que devuelve la funcin y el nmero y tipo de argumentos que toma. La declaracin en C++ se denomina prototipo: tipo NombreFuncion (lista argumentos); Ejemplos: double Media(double x, double y); void print(char* formato, ...); extern max(const int*, int); char LeerCaracter();

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

35

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Definicin de funciones La definicin de una funcin es el cuerpo de la funcin que se ha declarado con anterioridad. double Media (double x, double y) // Devuelve la media de x e y { return (x + y)/2.0 } char LeerCaracter() //Devuelve un carcter de la entrada estndar { char c; cin >> c; return c; } Argumentos por omisin Los parmetros formales de una funcin pueden tomar valores por omisin, o argumentos cuyos valores se inicializan en la lista de argumentos formales de la funcin. int Potencia (int n, int k = 2); Potencia(256); //256 elevado al cuadrado Los parmetros por omisin no necesitan especificarse cuando se llama a la funcin. Los parmetros con valores por omisin deben estar al final de la lista de parmetros: void fund (int i =3, int j); // ilegal void func2 (int i, int j=0, int k = 0); // correcto void func3 (int i = 2, int j, int k = 0); // ilega void ImprimirValores (int cuenta, double cantidad= 0.0);

Llamadas a la funcin ImprimirValores: ImprimirValores ( n , a); ImprimirValores ( n ); //equivalente a ImprimirValores (n, 0.0) Otras declaraciones y llamadas a funciones son: double fl(int n, int m, int p=0); double f2(int n, int m= 1, int p = 0); double f3(int n = 2, int m= 1, int p =0); double f4(int n, int m = 1, int p); double f5(int n = 2, int m, int p = 0);

//legal //legal //legal //ilegal //ilegal

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

36

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Funciones en lnea (inline) Si una declaracin de funcin est precedida por la palabra reservada inline, el compilador sustituye cada llamada a la funcin con el cdigo que implementa la funcin. inline int max(int a, int b) { if (a > b) return a; return b; } main () { int x = 5, y = 4; int z = Max(x,y); } Los parmetros con valores por omisin deben entrar al final de la lista de parmetros: Las funciones f1, f2 y f3 son vlidas, mientras que las funciones f4 y f5 no son vlidas. Las funciones en lnea (inline) evitan los tiempos suplementarios de las llamadas mltiples a funciones. Las funciones declaradas en lnea deben ser simples con slo unas pocas sentencias de programa; slo se pueden llamar un nmero limitado de veces y no son recursivas. inline int abs(int i); inline int min(int v1, int v2); int mcd(int vl, int v2); Las funciones en lnea deben ser definidas antes de ser llamadas. #include <iostream.h> int incrementar (int I); inline incrementar (int i) { i ++; return ; } main (void) { int i = 0; while (i < 5) { i = incrementar (i ) cout i es: i endl; } }

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

37

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Sobrecarga de funciones En C++, dos o ms funciones distintas pueden tener el mismo nombre. Esta propiedad se denomina sobrecarga. Un ejemplo es el siguiente: int max (int, int t); double max (double, double); o bien este otro: void sumar (char i); void sumar (float j); Las funciones sobrecargadas se diferencian en el nmero y tipo de argumentos, o en el tipo que devuelven las funciones, y sus cuerpos son diferentes en cada una de ellas. #include <iostream.h> void suma (char); void suma (float); main (void) { int i = 65; float j = 6.5; char c = a; suma ( i ); suma ( j ) ; suma ( c ) ; } void suma (char i) { cout << Suma interior(char) <<endl; } void suma ( float j ) { cout << Suma interior (float) << endl; }

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

38

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

El modificador const El modificador de tipos const se utiliza en C++ para proporcionar proteccin de slo lectura para variables y parmetros de funciones. Cuando se hace preceder un tipo de argumento con el modificador const para indicar que este argumento no se puede cambiar, el argumento al que se aplica no se puede asignar un valor ni cambiar. void copia (const char * fuente, char* dest); void funcdemo (const int I); Paso de parmetros a funciones En C++ existen tres formas de pasar parmetros a funciones: Por valor: La funcin llamada recibe una copia del parmetro y este parmetro no se puede modificar dentro de la funcin void intercambio (int x, int y) { int aux = y; y = x ; x = aux; } //..... intercambio (i , j ); // las variables i, j, no se intercambian Por direccin: Se pasa un puntero al parmetro. Este mtodo permite simular en C/C++ la llamada por referencia, utilizando tipos punteros en los parmetros formales en la declaracin de prototipos. Este mtodo permite modificar los argumentos de una funcin. void intercambio (int*x, int*y) { int aux = * y; *y = *x *x = aux; } // ... intercambio (&i, &j); // i , j se intercambian sus valores Por referencia: Se pueden pasar tipos referencia como argumentos de funciones, lo que permite modificar los argumentos de una funcin. void intercambio (int& x, int& y) { int aux = y; y = x; x = aux; } //..... intercambio (i, j); // i , j intercambian sus valores Si se necesita modificar un argumento de una funcin en su interior, el argumento debe ser un tipo de referencia en la declaracin de la funcin.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

39

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Paso de arrays Los arrays se pasan por referencia. La direccin del primer elemento del array se pasa a la funcin; los elementos individuales se pasan por valor. Los arrays se pueden pasar indirectamente por su valor si el array se define como un miembro de una estructura. Ejemplo 1: Paso del array completo. #include <iostream.h> void func1 (int x[] ); // prototipo de funcin void main( ) { int a[3] = {l, 2, 3}; func1 (a) ; // sentencias func1 (&a[0]) ; // equivalents } void func(int x[]) { int i; for (i = 0; 1 < 3; i + 1) cout << 1 << x[i]<< \n; } Ejemplo 2: Pasa de a un elemento de un array. #include <iostream.h> const int n + 3; void func2(int x); void main( ) { int a[n] = { l, 2, 3}; func2 (a[2] ); } void func2(int x) { cout << x << \n; }

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

40

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

IV. NOVEDADES

En lneas generales esta nueva versin tiene como objetivos coger lo mejor de otros lenguajes y veremos caractersticas claramente influenciadas por C#, Java o Python con lo que pretendan simplificar el uso de este lenguaje (pero que no necesariamente se logr). Una de las primeras mejoras que han implementado en C++ (y que de hecho, ya tiene soporte actualmente en muchos compiladores) es la deduccin de tipos. C++ es un lenguaje tipado, y como tal, fuerza a declarar las variables y su tipo antes de poder usarlas. A partir de ahora, mediante la palabra auto, se nos permitir no decir de qu tipo es; siendo el compilador el encargado de averiguarlo a partir de la informacin del cdigo fuente. Lo ms seguro es que esto provoque un montn de speguetti code, que puede llegar a ser muy til en ciertas construcciones de C++ que son demasiado literales, y que solo complican la lectura del cdigo. Como por ejemplo la declaracin de iteratores que suele ser tan desagradable a la vista como el siguiente ejemplo:

for (vector<vector<int>>::iterator i = v.begin(); i != v.end(); ++i) { // Aqu hacemos algo interesante }

A partir de ahora y gracias a esta nueva funcionalidad, podemos hacerlo de la siguiente manera:

for (auto i = v.begin(); i != v.end(); ++i) { // Aqu hacemos algo interesante }

Lo cual hace el cdigo bastante ms legible.

Como detalle adicional en el cdigo presentado anteriormente, podemos ver otra de las nuevas funcionalidades de C++, que sin lugar a dudas provoca muchsimos dolores de cabeza actualmente.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

41

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Vemos que en el primer fragmento de cdigo, no hemos tenido que separar los caracteres >. Actualmente es obligatorio, y lo que habra que escribir sera vector<vector<int> >. Esto ocurre debido a que los parsers actuales de C++ interpretan >> como el operador de desplazamiento, y no como la especializacin del template que se est llevando a cabo. A partir de ahora esto queda solucionado, y se podrn declarar variables de la forma vector<vector<int>> sin ningn problema. Nuevos tipos enumerados Los enumerados de C y de C++ tienen dos problemas difciles de resolver actualmente. El primero es que el nombre de los valores del enumerado se exporta al scope actual, lo que hace que dos enumerados totalmente distintos no puedan tener un valor con el mismo nombre. Aparte, los enumerados son en el fondo enteros, lo que implica que dos enumerados totalmente distintos se puedan comparar entre ellos; o que, puedan ser comparables igualmente con un entero. Por ltimo, el tipo subyacente que se usa para los enumerados no estaba definido por el estndar, por lo que era especfica de la implementacin de cada compilador. Para resolver estos problemas se ha aadido un nuevo tipo de enumerado de tipado fuerte, que simula de cierta manera a los enumerados existentes en Java por ejemplo. A partir de ahora se nos permite especificar qu tipo queremos que tengan esos enumerados por debajo, y los distintos valores no se exportarn al scope actual, teniendo que prefijarlos con el nombre del enumerado para poder usarlos.

enum class Color : char {Amarillo, Azul, Negro}; enum class RGB {Rojo, Verde, Azul}; // No hay colisin con Azul Color c = Color::Amarillo; Color c2 = Azul; // FALLO: Azul no existe, sera Color::Azul if (Color::Amarillo == 0) // FALLO: No comparable con un int printf("Blah!\n");

En este ejemplo podemos ver estos nuevos tipos de enumerados. El primero, Color, decidimos que tenga como tipo subyacente char, por lo que ocuparn 1B. Por su parte, el enumerado RGB no tiene tipo fijado, por lo que predeterminadamente ser un int (usualmente 4B).

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

42

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Tambin podemos ver como no se genera un error aunque el valor Azul est en ambos enumerados (esto provocara un fallo en compilacin con los enumerados normales), y por ltimo, vemos como hay ms restricciones a la hora de comparar los valores con otros tipos. Bucle foreach (for (it : lista)) Cuando tenemos listados de elementos, una de las operaciones ms bsicas que podemos hacer es recorrer esa lista entera (con algn pretexto ms o menos interesante). Para ello, lo ms lgico actualmente es realizar un bucle for en el que dado el nmero de elementos que sabemos tiene la lista, empecemos a recorrerlos uno a uno. Bien, la idea de esta nueva caracterstica es emular a los bucles foreach de otros lenguajes como Java o C#. Es una extensin de los bucles for que facilita iterar por toda la lista, y que en cada paso te da una referencia al elemento que se est visitando en ese instante.
int numeros[] = {1,2,3,4,5}; // Incrementamos en +1 todos los elementos for (auto it : numeros) // El tipo implcito es int& ++it;

El anterior es un ejemplo muy simple en el que vamos incrementando el valor de todos los nmeros de la lista. Esta caracterstica promete facilitar la lectura del cdigo y hacerlo menos propenso a errores. El nuevo puntero nulo (nullptr) En C y C++ la constante NULL es representada por el valor numrico 0 (en C algo ms complejo, ya que se castea a un void*). Esto genera problemas con las funciones o mtodos sobrecargados, debido a que se dan comportamientos no esperados y muy difciles de prever en el cdigo.
void func(int n); void func(char *n); func(0); // Llamar a func(int) func(NULL); // Llamar a func(int)

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

43

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

En este caso tenemos una funcin sobrecargada (puede recibir un entero o un carcter). El primer ejemplo vemos claramente que llamar a la primera funcin, ya que 0 es un entero normal y corriente. En cambio, el segundo ejemplo, que podramos esperar que llamase a la segunda, no lo hace; y llama igualmente a la primera, o directamente falla al compilar por resultar ambigua (dependiendo de la implementacin del compilador). Para resolver este problema se ha aadido una constante llamada nullptr.
void func(int n); void func(char *n); char *c = nullptr; char *c2 = NULL; func(nullptr); // Llamar a func(char*) bool t = (c == c2); // nullptr == NULL

Como podemos ver, esta constante soluciones los problemas generados en la sobrecarga y son totalmente compatibles con lo existente en C y C++. Nuevas cadenas de carcteres En C y C++ tenemos dos tipos de cadenas de caracteres. Los char, que representan caracteres de la tabla ASCII, y ocupan 1B; y los wchar_t, que se supone iban a facilitar el almacenamiento de caracteres Unicode. El problema es que el ancho no est definido en el estndar (en C por ejemplo wchar_t suele ser un alias de un int) y esto hace que no se puedan hacer implementaciones portables ya que no se asegura que tengan el suficiente ancho para alojar un carcter en UTF-8, UTF-16 u UTF-32. Para resolver esta situacin C++ crea dos nuevos tipos, char16_t y char32_t, que se usarn respectivamente para alojar caracteres de UTF-16 y UTF-32. De esta manera se asegura que estos tipos tengan un ancho suficiente (2B y 4B) para alojar los caracteres UNICODE.

const char *cad1 = u8"Esta cadena est en UTF-8"; const char16_t *cad2 = u"Esta cadena est en UTF-16"; const char32_t *cad3 = U"Esta cadena est en UTF-32";

Por ltimo, y como podemos ver en el ejemplo anterior, podemos usar u8, u y U, para crear cadenas de caracteres en los tres sets dichos anteriormente. Junto a estos tipos de datos se proporciona una nueva API con la que poder usarlos.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

44

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Tambin se aade una nueva forma de escribir cadenas de caracteres en las que se toma literalmente cada carcter como es; es decir, no se escapan. Esto es muy til a la hora de escribir expresiones regulares por ejemplo, donde cada vez que se escribe el carcter \, hay que escaparlo.
string c1 = "\\w\\\\\\w"; string c2 = R"[\w\\\w]"; // c1 y c2 son la misma cadena string c3 = R"del(Buu!)del"; // La cadena es: Buu! // La cadena es: Esta es una cadena raw y UTF-16 const char16_t *c4 = uR"*(Esta es una cadena raw y UTF-16)*";

Como se puede ver, para crear una raw string tenemos que empezar y terminar la cadena con el mismo delimitador (el cual puede ser cualquier cosa con como mucho 16 caracteres). La cadena resultante ser la cadena completa, quitando estos delimitadores. Aparte, y como se puede ver en el ltimo ejemplo, el uso es compatible con las cadenas Unicode que vimos anteriormente. Para marcar la cadena como raw string bastar con escribir una R previamente. Funciones eliminadas y predeterminadas (default / delete) A partir de ahora podemos especificar en las funciones que queremos que tengan el comportamiento normal (mediante la palabra clave default) o que queremos que no puedan existir (palabra clave delete). Gracias a esto podremos decidir por ejemplo que tipo de sobrecargas no queremos permitir en nuestro cdigo.

struct A { M(long long); M(long) = delete; // Se prohibe la conversin automtica };

Tambin, algo muy usual hasta ahora era querer prohibir la copia de los objetos. Gracias a esto podremos hacerlo de una manera muy cmoda, poniendo como delete el constructor copia, y el operador asignacin.

class X { X& operator=(const X&) = delete; X(const X&) = delete; };

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

45

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

De esta manera no se podrn copiar los objetos de la clase X. El mtodo default es anlogo, permitiendo especificarle al compilador que queremos que realice la accin predeterminada. Expresiones constantes (constexpr) Se permite especificar que expresiones o funciones son totalmente constantes en el cdigo. Gracias a esto daremos la oportunidad al compilador de realizar mejores optimizaciones; as como de poder usar estas expresiones en ms lugares. Como ejemplo tpico, el estndar de C++ obliga a que los arrays sean declaraciones mediante expresiones constantes, por lo que algo como
int getNum(); int array[getNum()]; // C++ invalido

Es una declaracin totalmente invlida, a pesar de que GCC s lo permita (en este caso no sigue el estndar).
constexpr int getNum(); int array[getNum()]; // C++11 valido

Gracias a la palabra clave constexpr podemos especificar que definiciones son constantes. Al hacerlo, el compilador impone bastantes restricciones para asegurarse de que la funcin es realmente constante, y que puede hallar su valor y sustituirlo sin ms en las zonas donde sea llamada. Estas restricciones son, entre otras, que la funcin solo pueda llamar a una funcin que tambin est declarada como constante, no se permite el uso de variables globales... Introspeccin de tipos (decltype) Es algo que ya exista en algunas implementaciones (GCC lo tiene mediante la extensin typeof) y a partir de ahora pasa a formar parte del estndar. Gracias a la palabra clave decltype podremos averiguar el tipo de una variable, pudiendo usarlo para declarar otras de forma dinmica.
int numero; decltype(numero) otroNum;

En el ejemplo anterior vemos como se usa decltype para averiguar el tipo de nmero (que es un int) y para declarar otra variable del mismo tipo.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

46

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Nuevo tipo bsico (long long) Se aade un nuevo tipo bsico al lenguaje.
long long num = 100LL;

Este tipo de datos que ya forma parte de C desde hace tiempo, y que g++ ya soportaba tambin, ser ahora estandarizado. Se asegura que en C++11 tendr al menos un tamao de 64bits (8 Bytes). Listas de inicializacin Se permite usar las llaves para inicializar cualquier tipo de estructura de C++. Hasta ahora, solo se poda hacer con las ms simples. A partir de ahora, se permite con objetos, estructuras, objetos dentro de estructuras; y en general, con cualquier tipo de elemento.
map<string,vector<int>> ventas = { {"Juan", {10, 20, 30}}, {"Paco", {20, 50, 100}}, {"Miguel", {100, 150, 200}} };

Esto puede extenderse a la inicializacin de casi cualquier tipo de dato. Gracias a esto se proporciona una forma unificada de inicializacin en C++, priorizando esta sobre las otras formas de inicializacin existentes hasta ahora. Constructores llamables Hasta ahora si tenamos dos constructores en una clase y queramos que los dos hiciesen algo parecido tenamos que repetir el cdigo en ambos. Esto es cosa del pasado.
class Edad { int edad; public: Edad(int x) { if (edad < 0) edad = 0; else edad= x; } Edad() : Edad(18) {} };

A partir de ahora, podemos realizar desde un constructor llamadas a otros constructores, permitiendo aglutinar en un mismo lugar el cdigo que sea idntico.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

47

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Inicializacin de atributos Los atributos de una clase no estticos no podan declararse en el lugar de su definicin, debido a que cada objeto dispone de una copia del mismo. Esto cambia en la prxima versin.
class Edad { int e = 10; // Nuevo en C++11 Edad : e(10) {}; // Analoga a la anterior };

Como puede verse, se permite la inicializacin de los atributos aunque no sean estticos. Los dos mtodos enseados anteriormente (inicializar el atributo directamente, o desde el constructor) son totalmente equivalentes. Aserciones a nivel de compilador (static_assert) Se ha incluido una directiva para realizar aserciones. Estas consisten en evaluar una expresin, y en caso de que sea falsa, imprimir la cadena dada como segundo parmetro.
static_assert(sizeof(long)==8, "Requeridos enteros de 64bits.");

Lo curioso de estas, es que son a nivel de compilador. Es decir, que la expresin ha de ser totalmente constante, y se evaluar a la hora de compilar el cdigo y no al ejecutarlo. Funciones lambda Usadas en muchos lenguajes de programacin funcional, las funciones lambda permiten ser declaradas insitu, en un mbito local (muy local), evitando tener que crear una nueva funcin para ello. El formato de una funcin lambda en C++11 es el siguiente:
[captura](parametros)->valor_devuelto {codigo} // Esqueleto [](int x, int y) -> int { return x + y; } // Suma dos parmetros

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

48

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Suelen ser muy usadas en funciones como std::sort, donde, en este caso, uno de los parmetros es un puntero a funcin que define como realizar el ordenamiento del listado. En el siguiente ejemplo podemos ver como ordenamos una lista de nmeros por su valor absoluto.
vector<int> v = {-10, 1,6,-30,-4,5} std::sort(v.begin(), v.end(), [](int x, int y){return abs(x) < abs(y);});

Todos los componentes de las funciones lambda son bastante fciles de entender, a excepcin de posiblemente captura (que est vaco en los ejemplos que hemos hecho hasta ahora). Este campo indica la forma en la que son capturadas las variables del scope por la funcin lambda, pudiendo ser por valor o por referencia. Algunas de las posibilidades son:
[] // No se coge ninguna variable [x, &y] // x se coge por valor, y por referencia [=] // Se cogen todas por valor [&] // Se cogen todas por referencia

En el siguiente ejemplo podemos ver como gracias a una funcin lambda realizamos la suma de todos los elementos de una lista, accediendo a la variable total por referencia, para que el valor no se pierda al terminar de ejecutarse la funcin lambda.
std::vector<int> lista = {1,2,3,4,5}; int total = 0; std::for_each(lista.begin(), lista.end(), [&total](int x) {total += x;});

Por ltimo, mencionar que las funciones lambda pueden guardarse bajo variables para poder ser usadas varias veces. Para simplificar esto, se puede hacer uso de la palabra auto.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

49

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Prohibicin de excepciones (noexcept) Se aade una forma de indicar cuando una funcin no puede lanzar una excepcin. En caso de que la lance, en vez de propagarse, el programa finalizar con una llamada a la funcin terminate().
int func(const vector<int>& v) noexcept { vector<int> resultado(v.size()); // Posible excepcin return 0; }

Si la operacin que crea el vector resultado no pudiese reservar suficiente espacio por falta de memoria, se lanzara una excepcin. Esta, en vez de propagarse hacia arriba en la pila de ejecucin, conllevara la terminacin del programa. Modificadores de mtodos (override y final) Se permite el uso de dos nuevos modificadores en los mtodos. Influenciados por Java, tienen como objetivo evitar errores de cdigo, en muchas ocasiones difcilmente detectables. override por un lado obliga a que el mtodo sobrescriba a otro, evitando que por accidente creemos uno nuevo, en vez de sobrescribir el deseado.
struct Base { virtual void f(); void g(); virtual void h() const; }; struct Heredado : Base { void f() override; // Correcto, sobrescribe Base::f() void g() override; // Error, Base::g() no es virtual void h() override; // Error, Base::h() tiene otra cabecera };

Como puede verse, en el segundo y tercer caso podra creerse que los mtodos sobrescriben a los de la clase base, pero no es as. Gracias a override detectamos estos errores en tiempo de compilacin.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

50

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

Por otra parte final prohbe que se pueda sobrescribir ese mtodo en clases derivadas, haciendo que el compilador genere un error en caso de que suceda.

struct Base { virtual void f() final; }; struct Heredado : Base { void f(); // Error, Base::f() es final };

De esta manera evitaremos que por accidente podamos sobrescribir un mtodo que no queremos.

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

51

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

V. CONCLUSIONES

Indudablemente el conocimiento del lenguaje de programacin C++ es imprescindible en la formacin acadmica de cualquier estudiante de las ciencias de la computacin. Luego de haber visto toda la funcionalidad, amplitud y ventajas del lenguaje de programacin C++ se puede concluir que es y seguir siendo un estndar de la industria del desarrollo de software y seguramente seguir evolucionando y sobreviviendo a lo largo de mucho tiempo, pues es la tendencia de cualquier lenguaje o sistema potente. La experiencia de haber conocido por primera vez este lenguaje de programacin tan poderoso me hace pensar que adems el campo y mbito de aplicacin es tan amplio y tan ilimitado que las nicas barreras para no explotar todo el potencial de este lenguaje est en nosotros mismo.

VI. BIBLIOGRAFA E-GRAFA

http://es.wikipedia.org/wiki/C%2B%2B http://www.mhe.es/universidad/informatica/8448146433/archivos/c++b.pdf

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

52

Proyecto Final Novedades, caractersticas y Sintaxis del Lenguaje C++

INTEGRANTES Oscar Eduardo Ribera Callejas Walter Giovanni Jurez Snchez Walter Alexander Zet Garca Pablo Faustino Asicona Mateo Osmar Juventino Fuentes

Facultad de Ingeniera en Ciencias y Sistemas de Computacin Introduccin a los sistemas de cmputo Primer Semestre 2013 Seccin A

Você também pode gostar