1 / 205

Lenguaje C++

B. Stroustrup, mediados de los 80, AT&T Paso de la programación tradicional (C) a estilos de abstracción de datos y orientación a objetos Conserva características del C y añade nuevos conceptos. Lenguaje C++. C con Classes A ñade objet o s a C

gwidon
Télécharger la présentation

Lenguaje C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. B. Stroustrup, mediados de los 80, AT&T Paso de la programación tradicional (C) a estilos de abstracción de datos y orientación a objetos Conserva características del C y añade nuevos conceptos Lenguaje C++

  2. C con Classes • Añade objetos a C • Conservar la eficiencia, portabilidad, ydisponibilidad de C • Comité ANSI X3J16, 1991 • Última versión adoptada por ISO, julio 1998 Lenguaje C++ Estandarización

  3. Añadir orientación a objetos Mejorar la seguridad en los tipos 'a' eschar, noint "a" esconstchar*, nochar* f()es equivalente a f(void) Se pueden utilizar constint como dimension de arrays Las etiquetas de estructuras (Structure tags)son tipos (type names) Lenguaje C++Cambios con respecto a C

  4. Mejoras en entrada/salida- IOStreams #include<iostream> using namespace std; main() {//begin cout << “Hello, world” << endl; }//end Lenguaje C++Cambios con respecto a C

  5. Introducción • Tipos de datos Fundamentales • Operadores • Control del flujo en los Programas • Tipos de Datos Compuestos • Programación con Funciones • Punteros Lenguaje C++

  6. Lenguaje C++Introducción • Componentes de un Programa C/C++ • Sentencias • Comentarios • Ficheros de “include” y “fuente” • La función main()

  7. Sentencias C/C++ • Las sentencias contienen • una o mas expresiones • llamadas a función, • operaciones numéricas, etc. • Terminan con unpunto y coma • Pueden abarcar mas de una línea Lenguaje C++Introducción

  8. Comentarios C/C++ • C++ agrega un nuevo comentario que se inicia con dos barras (//) y que llega hasta el final de la línea. Se pueden usar ambos estilos de comentarios, por ejemplo para comentar bloques grandes de código : • /* El comentario de C puede incluir // y se puede extender sobre varias líneas */ // /* Este es el estilo de comentarios de C++ */ hasta el fin de línea Lenguaje C++Introducción

  9. Ficheros de “include” y “fuente” • Ladirectiva#includeinserta el texto deun ficheroenel flujo de compilación antes de que comience • Ficheros de cabecera (.h) • Generalmente contienen declaraciones de funcionesy definiciones de constantes • Del sistema • Los componentes de la biblioteca estándar tienen ficheros de cabecera (header) • #include <stdio.h> • Del usuario (#ifndef .... #define ..... #endif) • #include "mydefs.h" • Ficheros de código fuente (.cc, .cpp) Lenguaje C++Introducción

  10. Lenguaje C++Introducción /* first.c: A First Program */#include <stdio.h> int main() { puts("** Welcome to C/C++ **"); puts("(You'll be glad youcame!)"); return 0; } ** Welcome to C/C++ ** (You'll be glad you came!)

  11. Lenguaje C++Introducción • Componentes de un Programa C • Un programa Ces una colección de funciones. • procedimientos, subrutinas • variables globales opcionales • Puede estar escrito en un solo fichero o en varios • Una función es una colección de sentencias delimitadas por { llaves } • main()es especial

  12. F1.h F2.h F3.h S1.c S2.c S1.obj S2.obj Prog.exe Lenguaje C++Introducción • Construcción de un ejecutable C/C++

  13. Módulos • El concepto de módulo en c++ se refiere a unidades de compilación separadas. • Similar al concepto en C. • El “linker” C++ es mas estricto que el de C Lenguaje C++Introducción

  14. Entrada / salida estándard en C • Permite E/Sde consola, ficheros, ysobre canales definidos en memoria • 3 flujos de E/S predefinidos: • stdin“standard input” (teclado) • stdout“standard output” (pantalla) • stderr“standard error” (pantalla) • Las funciones de consolautilizan implicitamentestdin o stdout Lenguaje C/C++Introducción

  15. #include <stdio.h> int main()//avg.c: Promedio 2 enteros { int num1, num2; float sum; puts(“Ingrese el primer número:"); scanf("%d",&num1); puts(“Ingrese el segundo número:"); scanf("%d",&num2); sum = num1 + num2; printf(“El promedio es: %f\n", sum/2); return 0; } Lenguaje C/C++Introducción

  16. Resultado Ingrese el primer número: 10 Ingrese el segundo número: 23 El promedio es: 16.500000 Si queremos solo dos decimales:printf(“El promedio es:%.2f\n", sum/2); El promedio es: 16.50 Lenguaje C/C++Introducción

  17. Resumen • Los programaspueden estar en uno o mas ficheros de texto • Los ficheros fuentepueden #include uno o masficheros de cabecera • Los ficheros fuente contienenuna o mas funciones • Lasfunciones contienensentencias • 3 flujos de E/S predefinidos Lenguaje C++Introducción

  18. Enteros Caracteres Números de punto flotante Literales y Constantes Aritméticas Conversiones y“Casts” Lenguaje C++Tipos fundamentales

  19. Enteros • Distintostamaños: • No necesariamente distintos • Por defecto tienen signo • inttamaño de la palabra de la maquina (almenos 16 bits) • short intgeneralmente equivalente a inten plataformas de 16-bit • long int Almenos 32 bits.Generalmente equivalente a intenplataformas de 32-bit Lenguaje C++Tipos fundamentales

  20. Caracteres • Son enteros • La codificación depende de la plataforma • ASCII, EBCDIC, ISO 8859, Unicode • char Almenos 8 bits (“byte”) • wchar_t“Wide character” Generalmente equivalente a unsigned int(Unicode) Lenguaje C++Tipos fundamentales

  21. Límites númericos • Valores importantes para cada tipo • Mínimo, máximo, etc. • Los límites para enterosestánen • C-> <limits.h> C++ -> <climits> • Los límites para punto flotanteestánen • C-> <float.h> C++-> <cfloat> Lenguaje C++Tipos fundamentales

  22. // limits.c: Límites de enteros #include <stdio.h> #include <limits.h> // #include <climits> int main() { printf("char: [%d, %d]\n", CHAR_MIN, CHAR_MAX); printf("short: [%d, %d]\n", SHRT_MIN, SHRT_MAX); printf("int: [%d, %d]\n", INT_MIN, INT_MAX); printf("long: [%ld, %ld]\n", LONG_MIN, LONG_MAX); return 0; } Lenguaje C++Tipos fundamentales char: [-128, 127] short: [-32768, 32767] int: [-2147483648, 2147483647] long: [-2147483648, 2147483647]

  23. Números decimales • float “Single precision” • double “Double precision” por defecto • long double • Precisiónextendida.Podría ser igual a double Lenguaje C++Tipos fundamentales

  24. int main() { // Definición sin inicialización: char proteina; int carbohydratos; float fibra; doublegrasa; // Definición & inicialización simultanea: char pizza = 'A', pop = 'Z'; intnumero = 100, ecos = 150, alumnos = 200; float chocolate = 3.14159; Lenguaje C++Tipos fundamentales

  25. Enteros sin signo • Cada tipo entero tiene una versión sin signo • Palabra clave unsigned • Se almacenan solamente números no negativos • Se utiliza el bit de signoen la mantisa • El valor máximo es el doble respecto a la versión con signo • El valor mínimo es cero • Se suelen utilizar como índice en arrays o para almacenar tamaños • size_t Lenguaje C++Tipos fundamentales

  26. #include <iostream> using namespace std; int main() { //Cuantos bytes ocupa un ….? char c; unsigned char cu; int i; unsigned int iu; short int is; short iis; // Same as short int unsigned short int isu; unsigned short iisu; long int il; long iil; // Same as long int unsigned long int ilu; unsigned long iilu; float f; double d; long double ld; cout << "\n char= " << sizeof(c) << "\n unsigned char = " << sizeof(cu) << "\n int = " << sizeof(i) << "\n unsigned int = " << sizeof(iu) << "\n short = " << sizeof(is) << "\n unsigned short = " <<sizeof(isu) << "\n long = " << sizeof(il) << "\n unsigned long = " << sizeof(ilu) << "\n float = " << sizeof(f) << "\n double = " << sizeof(d) << "\n long double = " << sizeof(ld) << endl; } Lenguaje C++Tipos fundamentales

  27. /*Illustrates unsigned limits */ #include <iostream> #include <climits> int main() { std::cout << "char: [0 " << UCHAR_MAX << "]\n"; std::cout << "short: [0, " << USHRT_MAX << "]\n"; std::cout << "int: [0, " << UINT_MAX << "]\n";; std::cout << "long: [0, " << ULONG_MAX << "]\n"; return 0; } char: [0, 255] short: [0, 65535] int: [0, 4294967295] long: [0, 4294967295] Lenguaje C++Tipos fundamentales

  28. float.c: Illustrates floating-pt. limits */ #include <stdio.h> #include <float.h> int main() { printf("radix: %d\n", FLT_RADIX); printf("float: %d radix digits\n", FLT_MANT_DIG); printf("\t[%g, %g]\n", FLT_MIN, FLT_MAX); printf("double: %d radix digits\n", DBL_MANT_DIG); printf("\t[%g, %g]\n", DBL_MIN, DBL_MAX); printf("long double: %d radix digits\n", LDBL_MANT_DIG); printf("\t[%Lg, %Lg]\n", LDBL_MIN, LDBL_MAX); return 0; } Lenguaje C++Tipos fundamentales

  29. Lenguaje C++Tipos fundamentales radix: 2 float: 24 radix digits [1.17549e-38, 3.40282e+38] double: 53 radix digits [2.22507e-308, 1.79769e+308] long double: 64 radix digits [3.3621e-4932, 1.18973e+4932]

  30. Lenguaje C++Tipos fundamentales • DistribuciónNo-uniforme • Densapara valores cercanos alcero • Spaciadapara valores lejanos decero - 0 +

  31. Lenguaje C++Tipos fundamentales /* missing.c */ #include <stdio.h> #include <limits.h> main() { float x = ULONG_MAX; /* 4.294.967.295 */ double y = ULONG_MAX; long double z = ULONG_MAX; printf("%f\n%f\n%Lf\n",x,y,z); } 4294967296.000000 /* Oops! */ 4294967295.000000 4294967295.000000

  32. Lenguaje C++Tipos fundamentales • Literales • int i = 9, j = 017, k = 0x7f; • char c = 'a', c2 = 97; • long n = 1234567L; • float x = 1.0F; • double y = 2.3; • long double z = 4.5L; • char string[] = "hello";

  33. Lenguaje C++Tipos fundamentales • Caracteres Literales especiales • '\n' newline – en c++ -> endl • '\t' tab • '\0' null byte (ASCII 0) • '\\' backslash (\) • '\b' backspace • '\r' carriage return • '\f' form feed • '\ddd' octal bit pattern

  34. En C/C++ => #define Pi 3.1416 • Las constantes deben ser inicializadas • Inicializadacon un literal: • const int i = 7; //compile-time • En C estándar existe const pero tiene diferencias con C++. En C no se puede utilizar como dimensión de array. • En C++ se puede usar el modificador const para declarar que aspectos particulares de una variable (u objeto) sean constantes. Lenguaje C++Tipos fundamentales Constantes

  35. Aritmética • Entera vs. Punto flotante • Aritméticaentera trunca cualquier fracción en el resultado:int i = 2; int j = 3; int k = i/j; /* k == 0! */ • Aritmética de Punto flotante tieneerroresde redondeo: • El resultadopuede no estaren elconjunto de números representados por la máquina • El redondeo es específico de cada plataforma Lenguaje C++Tipos fundamentales

  36. Promociones & Conversiones • Todas las operaciones enteras usanint o long • Una operación numérica asume la precisión deloperando cuyo tipo ofrezca la mayorLos operandos con precisiones menores son automática y temporalmente “ampliados” (o “promovidos”) • Cuidado con las conversiones que disminuyen precisión:Si el valor no esta en el rango del tipo de menor precisión, el resultadoes indefinido Lenguaje C++Tipos fundamentales

  37. Casts • Conversiones explícitas definidas por el programador • Preceden la expresión con el nuevo tipo entre paréntesis: • (tipo) expresión: especifica conversión • tipo(expresión): especifica conversión • int i = (int)x; • float r = float(1); // explicito tipo constructor • char * p = (char *) 0777; //como en C si el nombre • Para forzar la precisión de una operación, por ejemplo: • /* Asi se mantiene la fracción: */ • float x = (float)i / j; Lenguaje C++Tipos fundamentales

  38. int main() { int b = 200; unsignedlong a = (unsignedlongint)b; } ------------------------------------------------------------- int main() { float a = float(200); // This is equivalent to: float b = (float)200; } Lenguaje C++Conversión de Tipos

  39. static_cast: para todas las conversiones bien definidas void func(int) {} int main() { int i = 0x7fff; // Max pos value = 32767 long l; float f; // (1) Typical castless conversions: l = i; f = i; // Also works: l = static_cast<long>(i); f = static_cast<float>(i); Lenguaje C++Conversión de Tipos

  40. // (2) Narrowing conversions: i = l; // May lose digits i = f; // May lose info// Says "I know," eliminates warnings: i = static_cast<int>(l); i = static_cast<int>(f); char c = static_cast<char>(i); // (3) Forcing a conversion from void* : void* vp = &i; // Old way produces a dangerous conversion: float* fp = (float*)vp; // The new way is equally dangerous: fp = static_cast<float*>(vp); // (4) Implicit type conversions, normallyperformed by the compiler: double d = 0.0; int x = d;// Automatic type conversion x = static_cast<int>(d); // More explicit func(d); // Automatic type conversion func(static_cast<int>(d)); // More explicit } Lenguaje C++Conversión de Tipos

  41. Expresiones Boleanas • Tipobool. • El tipo bool puede asumir dos estados: • true o false • Tanto bool, como true y false son palabras claves. Lenguaje C++Tipos fundamentales

  42. Resumen • Los tipos fundamentales son numéricos (y bool) • Enteros y de punto flotante • Hay soporte para el concepto de constante • La aritmética entera trunca las fracciones • La aritmética de punto flotante es inexacta • Los operandos sonampliados (precisión) si es necesario. Conversiones implícitas. • Se pueden realizar conversiones explícitas(“cast”) Lenguaje C++Tipos fundamentales

  43. Matemáticos Relacionales Lógicos De bits Operadores de asignación Asociatividad y precedencia Lenguaje C++Operadores

  44. Cardinalidad de los Operadores • Todos los operadores sonunarios o binarios • Excepción: El operador “condicional” es ternario: max = x > y ? x : y; Equivalente a: if (x>y) max = x; else max = y; Lenguaje C++Operadores

  45. Matemáticos • Aditivos: +, -, ++, -- • i = j++; /* i = j; j = j + 1; */ • i = ++j; /* j = j + 1; i = j; */ • Multiplicativos: *, /, % • i = 10 % 3; /* = 1 */ Lenguaje C++Operadores

  46. Relacionales - ISO646.H • Igualdad:== • if (i == j) …; • if (i = j) …; /* error! */ • Desigualdad: != - not_eq • Mayor:>, >= • Menor:<, <= Lenguaje C++Operadores

  47. Lógicos -ISO646.H • AND: &&- and • if (i < n && a[i] == 99) … • OR: ||- or • if (i == 2 || i == 3) … • NOT: !- not • if (!(i == 2 || i == 3)) … • Como se evalúa una expresión && ? • Como se evalúa una expresión ||? Lenguaje C++Operadores

  48. Operadores de asignación • La asignación se puede combinar con otros operadores binarios: • +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, != • Ejemplo • i += 5; // i = i + 5; Lenguaje C++Operadores

  49. Asociatividad • Señala el orden en el que se ejecutan las operaciones adyacentes • Derecha a izquierda: • Los operadores unarios y de asignación • i = j = kequivalente ai = (j = k) • Izquierda a derecha: • Todos los demás • i + j + kequivalente a (i + j) + k Lenguaje C++Operadores

  50. Precedencia • En general siguen la convención de matemáticas • Primero los unarios, luego multiplicativos, luego aditivos • Los operadores unarios tiene la mayor prioridad • La asignaciónes la operación de menor prioridad (exceptoel operador coma) • Cuidado con la prioridad en los operadores de bits! • Ante cualquier duda utilizar paréntesis Lenguaje C++Operadores

More Related