2.1k likes | 2.69k Views
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
E N D
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 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
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
Mejoras en entrada/salida- IOStreams #include<iostream> using namespace std; main() {//begin cout << “Hello, world” << endl; }//end Lenguaje C++Cambios con respecto a C
Introducción • Tipos de datos Fundamentales • Operadores • Control del flujo en los Programas • Tipos de Datos Compuestos • Programación con Funciones • Punteros Lenguaje C++
Lenguaje C++Introducción • Componentes de un Programa C/C++ • Sentencias • Comentarios • Ficheros de “include” y “fuente” • La función main()
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
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
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
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!)
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
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++
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
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
#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
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
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
Enteros Caracteres Números de punto flotante Literales y Constantes Aritméticas Conversiones y“Casts” Lenguaje C++Tipos fundamentales
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
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
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
// 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]
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
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
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
#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
/*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
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
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]
Lenguaje C++Tipos fundamentales • DistribuciónNo-uniforme • Densapara valores cercanos alcero • Spaciadapara valores lejanos decero - 0 +
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
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";
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
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
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
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
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
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
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
// (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
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
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
Matemáticos Relacionales Lógicos De bits Operadores de asignación Asociatividad y precedencia Lenguaje C++Operadores
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
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
Relacionales - ISO646.H • Igualdad:== • if (i == j) …; • if (i = j) …; /* error! */ • Desigualdad: != - not_eq • Mayor:>, >= • Menor:<, <= Lenguaje C++Operadores
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
Operadores de asignación • La asignación se puede combinar con otros operadores binarios: • +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, != • Ejemplo • i += 5; // i = i + 5; Lenguaje C++Operadores
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
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