INSTITUTO TECNOLOGICO DE VERACRUZ INTRODUCCION A LA PROGRAMACION

  • Slides: 157
Download presentation
INSTITUTO TECNOLOGICO DE VERACRUZ INTRODUCCION A LA PROGRAMACION © Dr. José Antonio Garrido Natarén

INSTITUTO TECNOLOGICO DE VERACRUZ INTRODUCCION A LA PROGRAMACION © Dr. José Antonio Garrido Natarén 2016 1/158

PROGRAMACION C es un lenguaje de programación originalmente desarrollado por Dennis M. Ritchie entre

PROGRAMACION C es un lenguaje de programación originalmente desarrollado por Dennis M. Ritchie entre 1969 y 1972 en los Laboratorios Bell. C fue un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix. 2/158

PROGRAMACION C++ es un lenguaje de programación diseñado a mediados de los años 1980

PROGRAMACION C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup en la Universidad A&M de Texas. La intención de su creación fue el extender al lenguaje de programación C mecanismos que permiten la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido. 3/158

PROGRAMACION El Lenguaje C LAS VARIABLES LOS APUNTADORES Y LAS REFERENCIAS LOS ARREGLOS DE

PROGRAMACION El Lenguaje C LAS VARIABLES LOS APUNTADORES Y LAS REFERENCIAS LOS ARREGLOS DE DATOS LAS SENTENCIAS LAS CLASES LOS OPERADORES LAS FUNCIONES EL C++ DE MFC LAS CLASES DE DATOS MFC LAS CLASES DE COLECCIONES 4/158

PROGRAMACION El programa C++ mas pequeño int main() { return 0; } 5/158

PROGRAMACION El programa C++ mas pequeño int main() { return 0; } 5/158

PROGRAMACION LAS VARIABLES 6/158

PROGRAMACION LAS VARIABLES 6/158

PROGRAMACION Tamaño de tipos básicos 7/158

PROGRAMACION Tamaño de tipos básicos 7/158

PROGRAMACION Tipos fundamentales Nombre Tamaño Comentario int 4 bytes Opción predeterminada para los valores

PROGRAMACION Tipos fundamentales Nombre Tamaño Comentario int 4 bytes Opción predeterminada para los valores enteros. double 8 bytes Opción predeterminada para los valores de punto flotante. bool 1 byte Representa valores que pueden ser true o false. char 1 byte Se utiliza en los caracteres ASCII de cadenas de estilo C antiguas u objetos std: : string que nunca tendrán que convertirse a UNICODE. wchar_t 2 bytes Representa valores de caracteres “anchos” que se pueden codificar en formato UNICODE (UTF-16 en Windows; puede diferir en otros sistemas operativos). Es el tipo de carácter que se utiliza en las cadenas de tipo std: : wstring. unsigned char 1 byte C++ no tiene un tipo byte integrado. Utilice un carácter sin signo para representar un valor byte. unsigned int 4 bytes Opción predeterminada para los marcadores de bits. long 8 bytes Representa valores enteros muy grandes. 8/158

PROGRAMACION Tipos de datos Caracteres: char, CHAR ´a´ Enteros: short, int, long 128, 4726,

PROGRAMACION Tipos de datos Caracteres: char, CHAR ´a´ Enteros: short, int, long 128, 4726, 123 467 Punto flotante: float, double 3. 1415, 989 765 354. 987 Booleanos: bool, BOOL true, false, TRUE, FALSE Vacío: void - 9/158

PROGRAMACION Los nombres • Un nombre o identificador se compone de una secuencia de

PROGRAMACION Los nombres • Un nombre o identificador se compone de una secuencia de letras y números. • El primer carácter debe de ser una letra. • El carácter ´_´ se considera una letra. • No importa el numero de caracteres. • El carácter ´$´ y las palabras reservadas no pueden ser nombres. • Las mayúsculas son diferentes de las minúsculas • El carácter espacio ´ ´ no puede ser parte de un nombre. 10/158

PROGRAMACION La notación húngara (MS) La notación húngara es un sistema usado normalmente para

PROGRAMACION La notación húngara (MS) La notación húngara es un sistema usado normalmente para crear los nombres de variables. Su creador, Charles Simonyi, desarrollador de programas MS nació en Hungría. La notación húngara consiste en prefijos en minúsculas que se añaden a los nombres de las variables y que indican su tipo. El resto del nombre indica, lo más claramente posible, la función que realiza la variable. 11/158

La notación húngara (MS) Prefijo Significado b c dw f h l lp lpfn

La notación húngara (MS) Prefijo Significado b c dw f h l lp lpfn lpsz n p pt Booleano (int) Carácter (un byte) Entero largo de 32 bits sin signo (double word) Flags empaquetados en un entero de 16 bits Manipulador de 16 bits (handle) Entero largo de 32 bits Puntero a entero largo de 32 bits Puntero largo a una función que devuelve un entero Puntero largo a una cadena terminada con cero Entero de 16 bits Puntero a entero de 16 bits Coordenadas (x, y) empaquetadas en un entero de 32 bits rgb Valor de color RGB empaquetado en un entero de 32 bits sz w Cadena terminada en cero Entero corto de 16 bits sin signo (word) 12/158

PROGRAMACION Las declaraciones • Para que un nombre pueda ser utilizado debe de ser

PROGRAMACION Las declaraciones • Para que un nombre pueda ser utilizado debe de ser declarado antes en el archivo *. h. • El tipo del nombre debe de ser precisado para informar al compilador del tipo. *. h int n. Value, n. Age; Char s. Name; 13/158

PROGRAMACION El valor NULL • El valor NULL, expresa un valor nulo • NULL

PROGRAMACION El valor NULL • El valor NULL, expresa un valor nulo • NULL no es un tipo (para eso esta void) void* puntero = NULL; int entero = NULL; bool boleana = NULL; char caracter = NULL; 14/158

PROGRAMACION Los comentarios tienen como propósito el de guiar en la comprensión del programa.

PROGRAMACION Los comentarios tienen como propósito el de guiar en la comprensión del programa. Los comentarios son de 2 tipos: • Multílinea: Empiezan con ´/*´ y termina con ´*/´ /* tantos comentarios como se quiera explicar el código aquí escrito por mi */ • Monolínea: Empieza son ´//´ y se acaba con la línea // En esta línea se quiso decir esto 15/158

PROGRAMACION Las Estructuras (I) Una estructura es un conjunto de diferentes tipos de datos

PROGRAMACION Las Estructuras (I) Una estructura es un conjunto de diferentes tipos de datos asociados a un tipo. struct Alumno { Char c. Name[10] = “miguel”; // nombre int n. Edad; // edad int n. Year; // año de nacimiento int n. Control; // numero de control }; 16/158

PROGRAMACION Las Estructuras (III) • Las estructuras son tipos que reagrupan otros tipos bajo

PROGRAMACION Las Estructuras (III) • Las estructuras son tipos que reagrupan otros tipos bajo un nuevo tipo. • Las estructuras están definidas en el lenguaje ´C´ • Existen 3 tipos de estructuras en C++ • 1) struct. Permite agrupar variables de tipos iguales o diferentes en un solo registro • 2) union. Permite crear un nuevo tipo con datos compartidos • 3) class. Permite asociar variables y funciones 17/158

PROGRAMACION Las Estructuras (II) Una estructura es un tipo de variable. Alumno Mi. Alumno,

PROGRAMACION Las Estructuras (II) Una estructura es un tipo de variable. Alumno Mi. Alumno, Otro. Alumno; // declaracion Mi. Alumno. c. Name = “miguel”; // nombre Mi. Alumno. n. Edad = 23; // edad Mi. Alumno. n. Control = 09782345 // numero de control Otro. Alumno = Mi. Alumno; 18/158

PROGRAMACION Las Estructuras (III) Un miembro de una estructura se identifica por la variable

PROGRAMACION Las Estructuras (III) Un miembro de una estructura se identifica por la variable que representa la estructura seguido de un punto “. ” seguido del nombre de la variable Alumno Mi. Alumno; // declaracion Mi. Alumno. c. Name = “miguel”; // nombre Mi. Alumno. n. Edad = 23; // edad Mi. Alumno. n. Control = 09782345 // numero de control 19/158

PROGRAMACION Las Estructuras (III) Sintaxis general de struct [ <nombre tipo de estructura >

PROGRAMACION Las Estructuras (III) Sintaxis general de struct [ <nombre tipo de estructura > ] { [ <tipo> <nombre-variable[, nombre-variable, . . . ]> ] ; . . . } [ <variables de estructura> ] ; *. h struct. Student { int n. Age; char[50] s. Name; } STUDENT, *LPSTUDENT; 20/158

PROGRAMACION Las Estructuras (III) Miembros de una struct el operador de acceso ´. ´permite

PROGRAMACION Las Estructuras (III) Miembros de una struct el operador de acceso ´. ´permite acceder a un miembro a partir del nombre de la variable. *. cpp struct. Student Estudiante. Mecatronica; int n. Edad = Estudiante. Mecatronica. n. Age; char * p. Name = Estudiante. Mecatronica. s. Name; 21/158

PROGRAMACION Las Estructuras (III) Estructuras anidadas Una estructura puede contener otra estructura. *. h

PROGRAMACION Las Estructuras (III) Estructuras anidadas Una estructura puede contener otra estructura. *. h struct. Resident{ struct. Student; char[50] s. Company; } RESIDENT, *LPRESIDENT; *. cpp struct. Residente. Mecatronica; char * p. Name = Residente. Mecatronica. Student. s. Name; 22/158

PROGRAMACION Las Estructuras (III) union • Una union es un tipo de estructura, con

PROGRAMACION Las Estructuras (III) union • Una union es un tipo de estructura, con miembros que comparten el mismo espacio de almacenamiento. • Una variable de tipo union puede contener (en momentos diferentes) objetos de diferentes tipos y tamaños. • Las uniones proporcionan una forma de manipular diferentes clases de datos dentro de una sola área de almacenamiento. • En cualquier momento una union puede contener un máximo de un objeto debido a que los miembros de una union comparten el espacio de almacenamiento 23/158

PROGRAMACION Las Estructuras (III) Sintaxis de union Una union se declara con el mismo

PROGRAMACION Las Estructuras (III) Sintaxis de union Una union se declara con el mismo formato de una struct. Primero declaramos el tipo union y luego declaramos variables de ese tipo. *. h union. Valores { int ival; float fval; str sval; } VALORES, * LPVALORES; 24/158

PROGRAMACION Las Estructuras (III) Los datos de una union • La variable será lo

PROGRAMACION Las Estructuras (III) Los datos de una union • La variable será lo suficientemente grande como para mantener el mayor de los tres tipos. • Valores de cualquiera de esos tipos pueden ser asignados y después empleado en expresiones mientras que el uso sea consistente • El tipo recuperado será el tipo que se almacenó mas recientemente. • El resultado de referenciar un miembro de union diferente al último que se guardó es indefinido 25/158

PROGRAMACION Las Estructuras (III) El operador sizeof devuelve el tamaño de una estructura *.

PROGRAMACION Las Estructuras (III) El operador sizeof devuelve el tamaño de una estructura *. h struct. Resident { struct. Student; char[50] s. Company; } RESIDENT, *LPRESIDENT; *. cpp Int n. Size = sizeof(RESIDENT); // n. Size vale 102 26/158

PROGRAMACION Las enumeraciones Un tipo de datos enumerado es una manera de asociar nombres

PROGRAMACION Las enumeraciones Un tipo de datos enumerado es una manera de asociar nombres a números. La palabra reservada enum (de C) enumera automáticamente cualquier lista de identificadores que se le pase, asignándoles valores de 0, 1, 2, etc. enum OPERATION {OPNONE=1, OP_CIRCLE, OP_SEGMENT, OP_RECT, OP_ELLIPSE, OP_LINE}; 27/158

PROGRAMACION Las variables (I) Una variable representa un nombre que almacena un valor que

PROGRAMACION Las variables (I) Una variable representa un nombre que almacena un valor que puede cambiar. Una variable tiene necesariamente un tipo: char, int, short, bool, float, etc. Ejemplos: char c. Inicial; short s. Edad; int n. Year; float f. Pi; 28/158

PROGRAMACION Las variables (II) • El nombre de una variable puede estar compuesto de

PROGRAMACION Las variables (II) • El nombre de una variable puede estar compuesto de letras, números y cualquier otro carácter que no sea un operador ni espacio. • El nombre de una variable es sensible a mayúsculas Una variable guarda un valor: Ejemplos: c. Inicial = ´a´; n. Edad = 33; n. Year = 2016; f. Pi = 3. 14159; 29/158

PROGRAMACION Las variables (III) Una variable debe de ser declarada antes de que pueda

PROGRAMACION Las variables (III) Una variable debe de ser declarada antes de que pueda ser utilizada, ya sea en el archivo. h o en el. cpp. Siempre antes de ser utilizada. *. h union. Valores { int ival; float fval; str sval; } VALORES, * LPVALORES; *. cpp VALORES Mi. Valor ; Mi. Valor. i. Val = 12; 30/158

PROGRAMACION Las variables (III) Se pueden inicializar muchas variables en una sola línea separadas

PROGRAMACION Las variables (III) Se pueden inicializar muchas variables en una sola línea separadas por ´, ´ *. cpp VALORES Mi. Valor , Tu. Valor; Las variables de tipo conocidas se inicializan a ´ 0´, a ´NULO´ o a ´VACIO´ *. cpp VALORES Mi. Valor ; // Mi. Valor. i. Val = 0; // Mi. Valor. f. Val = 0; // Mi. Valor. s. Val = ´´; 31/158

PROGRAMACION Las variables (III) Se pueden inicializar una variable con su constructor natural. *.

PROGRAMACION Las variables (III) Se pueden inicializar una variable con su constructor natural. *. cpp int n. Val(12), f. Val(3. 1415); char * pn. Name(NULL); 32/158

PROGRAMACION Las variables (III) El ámbito de una variable. El ámbito, alcance o scope

PROGRAMACION Las variables (III) El ámbito de una variable. El ámbito, alcance o scope de una variable es la parte del programa donde la variable es accesible. En C++ existen tres tipos de ámbitos: • Global o de programa • Local o de función. • De bloque. 33/158

PROGRAMACION Las variables (III) Las variables globales • Son variables declaradas fuera de cualquier

PROGRAMACION Las variables (III) Las variables globales • Son variables declaradas fuera de cualquier función, normalmente al comienzo del programa. • Las variables globales son accesibles desde su declaración hasta el final del programa por todas las funciones que lo forman. *. cpp // Ejemplo de variable global int n. X = 1; // se declara x como global. int main() { …. . 34/158

PROGRAMACION Las variables (III) Las variables locales o de función • Las variables locales

PROGRAMACION Las variables (III) Las variables locales o de función • Las variables locales son las que se declaran dentro de una función. • Son accesibles desde el punto donde se declaran hasta el final del bloque donde se han declarado. • Los límites de los bloques están definidos por las llaves de apertura y cierre { }. • Si el bloque donde se ha declarado la variable local contiene a su vez otros bloques, también son accesibles dentro de ellos. • Las variables locales se destruyen cuando se sale del bloque donde han sido declaradas. • Los parámetros formales (los que aparecen en la cabecera de una función) se consideran variables locales de la función. 35/158

PROGRAMACION Las variables (III) Las variables de bloque • Una función puede contener bloques

PROGRAMACION Las variables (III) Las variables de bloque • Una función puede contener bloques definidos dentro de otros. • Los límites de los bloques están definidos por las llaves de apertura y cierre { }. • El ámbito de una variable declarada dentro de un bloque comienza en el punto en que se declara hasta el final del bloque donde se ha declarado (llave final del bloque). • Una variable de bloque se destruye cuando acaba la ejecución del bloque donde se ha declarado. 36/158

PROGRAMACION Las variables (III) Ocultamiento de variables • Una variable global y otra local

PROGRAMACION Las variables (III) Ocultamiento de variables • Una variable global y otra local y/o de bloque pueden tener el mismo nombre. • la variable global queda oculta en el ámbito de accesibilidad de la local del mismo nombre. • La variable local queda oculta en el ámbito de accesibilidad de la de bloque. • La variable de bloque queda oculta si en un bloque anidado se declara otra variable con el mismo nombre => Si una variable es definida mas de una vez en un mismo ámbito, el compilador marca un error. 37/158

PROGRAMACION Las variables (III) La declaración de un nuevo tipo typedef la palabra clave

PROGRAMACION Las variables (III) La declaración de un nuevo tipo typedef la palabra clave typedef permite definir sus propios tipos de datos. Syntaxis: typedef type-declaration synonym; typedef char Flag. Type; typedef enum FIGURETYPE {FT_POLYLINE=1, FT_POLYGON}; 38/158

PROGRAMACION Las variables (III) Las constantes Las datos constantes, mal llamadas por algunos "variables

PROGRAMACION Las variables (III) Las constantes Las datos constantes, mal llamadas por algunos "variables constantes" (realmente no son variables) tienen un valor fijo durante toda la ejecución del programa, es decir, este valor no cambia ni puede ser cambiado a lo largo de la ejecución de nuestro programa. Syntaxis 1: #define nombre_constante valor La instrucción const nos permite declarar constantes de una manera más adecuada y acorde y se declaran al interior de nuestro código como un tipo cualquiera. const float PI = 3. 1416; //Definimos una constante llamada PI 39/158

PROGRAMACION Las variables (III) Las variables estáticas • Las variables estaticas no se borran

PROGRAMACION Las variables (III) Las variables estáticas • Las variables estaticas no se borran • Están identificadas por la palabra reservada static. • Las variables estáticas pueden a) Locales (asociada a la función en la que se declara) b) Globales (visible por todo el programa) void function() { static int n. Count = 0; } 40/158

PROGRAMACION Los apuntadores Y las referencias 41/158

PROGRAMACION Los apuntadores Y las referencias 41/158

PROGRAMACION Los apuntadores A un apuntador puede asignársele un valor a través del carácter

PROGRAMACION Los apuntadores A un apuntador puede asignársele un valor a través del carácter ´&´ que precede la variable a la que va a apuntar : Ejemplos: char * lpc. Inicial = &c. Inicial; short * lpn. Edad = &n. Edad; int * lpn. Year = &n. Year; float * lpf. Pi = &f. Pi; El símbolo “&” representa la dirección de la memoria de una variable 42/158

PROGRAMACION Los apuntadores • Un apuntador es una variable que representa la dirección de

PROGRAMACION Los apuntadores • Un apuntador es una variable que representa la dirección de una variable. • Un apuntador tiene necesariamente el tipo de la variable seguido del carácter´*´ char *, int *, short *, bool *, float *, etc. Ejemplos: char * lpc. Inicial; short * lpn. Edad; int * lpn. Year; float * lpf. Pi; 43/158

PROGRAMACION Los apuntadores Si el valor de un apuntador se declara como short *

PROGRAMACION Los apuntadores Si el valor de un apuntador se declara como short * lpn. Edad = &n. Edad; Entonces… lpn. Edad *lpn. Edad // apunta a la dirección de la variable n. Edad // Representa el valor n. Edad 44/158

PROGRAMACION Los apuntadores Apuntadores constantes const int *p = &a; //objeto constante y puntero

PROGRAMACION Los apuntadores Apuntadores constantes const int *p = &a; //objeto constante y puntero variable 45/158

PROGRAMACION Los apuntadores Un apuntador se inicializa automaticamente con el valor NULL short *

PROGRAMACION Los apuntadores Un apuntador se inicializa automaticamente con el valor NULL short * lpn. Edad; Es lo mismo que short * lpn. Edad(NULL); NULL, es el espacio en memoria con dirección 0 NULL no es un valor 0 46/158

PROGRAMACION Los apuntadores El apuntador void • Un apuntador de cualquier tipo de dato

PROGRAMACION Los apuntadores El apuntador void • Un apuntador de cualquier tipo de dato puede convertirse a un apuntador del tipo void *. • Por esto un apuntador void *, recibe el nombre de apuntador genérico. • C++ no permite la conversión implícita de punteros. 47/158

PROGRAMACION Los apuntadores El apuntador void int *puntero; funcion (*puntero); . . void funcion

PROGRAMACION Los apuntadores El apuntador void int *puntero; funcion (*puntero); . . void funcion (void *p) { int *q; q=(int *)p; //En C se podria hacer q = p; } 48/158

PROGRAMACION Los apuntadores Los operadores de incremento (++) y decremento (--) se aplican con

PROGRAMACION Los apuntadores Los operadores de incremento (++) y decremento (--) se aplican con los apuntadores. char s. Name[20]; char * pchar = s. Name; // apunta al carácter s. Name[0] pchar++; // apunta al carácter s. Name[1] 49/158

PROGRAMACION Los apuntadores Si una variable es un apuntador de una estructura, sus miembros

PROGRAMACION Los apuntadores Si una variable es un apuntador de una estructura, sus miembros se identifican por el apuntador que representa la estructura seguido de una flecha “->” seguido del nombre de la variable Alumno Mi. Alumno; // declaracion Alumno * p. Otro. Alumno = & Mi. Alumno; p. Otro. Alumno->c. Name = “miguel”; // nombre p. Otro. Alumno->n. Edad = 23; // edad p. Otro. Alumno->n. Control = 09782345; // numero de control 50/158

PROGRAMACION Las referencias • Una referencia almacena la dirección de un objeto. • Una

PROGRAMACION Las referencias • Una referencia almacena la dirección de un objeto. • Una referencia inicializada no puede hacer referencia a otro objeto ni establecerse en NULL. • Una referencia se comporta como una especie de “nombre alternativo” para un objeto. • Una referencia necesita ser inicializada en el momento de la declaración. • Una referencia jamás dejará de referirse al objeto de su inicialización. 51/158

PROGRAMACION Las referencias La referencia es un sobrenombre (un nombre alternativo) para una variable

PROGRAMACION Las referencias La referencia es un sobrenombre (un nombre alternativo) para una variable mientras que un puntero es una variable que guarda un dirección de memoria como valor. Podemos usar las referencias para crear apodos a variables en un programa. Lo usual es usar referencias para pasar parámetros a las funciones por referencia y no por valor. 52/158

PROGRAMACION Las referencias A diferencia de las referencias, los punteros pueden usarse para manipular

PROGRAMACION Las referencias A diferencia de las referencias, los punteros pueden usarse para manipular direcciones de memoria. Por ejemplo, al crear y destruir dinámicamente memoria. 53/158

PROGRAMACION Los parámetros de funciones por referencias Existen 3 maneras de pasar parámetros a

PROGRAMACION Los parámetros de funciones por referencias Existen 3 maneras de pasar parámetros a una función: 1. Por valor 2. Por apuntador 3. Por referencia 54/158

PROGRAMACION Los parámetros de funciones por referencias El paso de datos por referencia a

PROGRAMACION Los parámetros de funciones por referencias El paso de datos por referencia a una función es el mas aconsejado por: 1. Se accede a la variable naturalmente 2. Es mas rápido y económico 3. Permite modificar los valores pasados 55/158

PROGRAMACION Los arreglos de datos 56/158

PROGRAMACION Los arreglos de datos 56/158

PROGRAMACION Los arreglos (I) • Los arreglos son una colección de variables de un

PROGRAMACION Los arreglos (I) • Los arreglos son una colección de variables de un mismo tipo • Un arreglo tiene un tipo • Un arreglo va del elemento 0 al N • Un arreglo tiene dimensiones Un arreglo de una dimensión se declara como int n. Arreglo[100]; // declara un vector de 100 valores enteros Un arreglo de 2 dimensiones de declara como: int n. Arreglo[10]; // declara 100 valores enteros en 2 dimensiones 57/158

PROGRAMACION Los arreglos (II) Un elemento del arreglo se identifica con un índice: int

PROGRAMACION Los arreglos (II) Un elemento del arreglo se identifica con un índice: int n. Valor = n. Arreglo[15]; // recupera el valor 16 int n. Valor = n. Arreglo[i]; // recupera el valor i int n. Valor = n. Arreglo[i][j]; // recupera el valor i, j El primer elemento de un arreglo es el valor 0: int n. First = n. Valor[0]; // primer valor del arreglo El ultimo valor del arreglo es el N-1: int n. Last = n. Valor[99]; // ultimo valor del arreglo 58/158

PROGRAMACION Los arreglos (II) Los arreglos y los apuntadores. El nombre de un arreglo

PROGRAMACION Los arreglos (II) Los arreglos y los apuntadores. El nombre de un arreglo es la dirección del arreglo char s. Name[20]; char * p. Name = (char*)s. Name; Que es equivalente a: char * p. Name = &s. Name[0]; 59/158

PROGRAMACION Los arreglos (II) Los arreglos y las cadenas alfanuméricas. Una cadena alfanumérica es

PROGRAMACION Los arreglos (II) Los arreglos y las cadenas alfanuméricas. Una cadena alfanumérica es un arreglo con valor 0 del ultimo elemento útil, lo que indica el final de la cadena. char s. Name[20]; s. Name[0] = ´p´; s. Name[1] = ´e´; s. Name[2] = ´p´; s. Name[3] = ´e´; s. Name[4] = 0; // s. Name vale “pepe” 60/158

PROGRAMACION Los arreglos (II) La navegación en un arreglo El nombre del arreglo seguido

PROGRAMACION Los arreglos (II) La navegación en un arreglo El nombre del arreglo seguido de Los caracteres [n] identifica el elemento n del arreglo. char s. Name[20]; char s. Letra = s. Name[n]; // s. Letra contiene al elemento n Un apuntador permite navegar en un arreglo char * p. Letra = s. Name; p. Letta += n; // *p. Letra contiene al elemento n 61/158

PROGRAMACION Las sentencias 62/158

PROGRAMACION Las sentencias 62/158

PROGRAMACION Las Instrucciones (I) Las instrucciones controlan el flujo de ejecución de un programa

PROGRAMACION Las Instrucciones (I) Las instrucciones controlan el flujo de ejecución de un programa • • • Asignacion = if if – else if for while switch break; return 63/158

PROGRAMACION Las Instrucciones (II) • Las instrucciones están separadas por “; ” • Los

PROGRAMACION Las Instrucciones (II) • Las instrucciones están separadas por “; ” • Los espacios no cuentan entre las instrucciones • Los caracteres “{“ y “}” definen un bloque de instrucciones 64/158

PROGRAMACION La Instrucción de asignación “=“ La instrucción de asignación “=“ asigna un valor

PROGRAMACION La Instrucción de asignación “=“ La instrucción de asignación “=“ asigna un valor a una variable int n. Val = 45; 65/158

PROGRAMACION La Instrucción de condición “if” La instrucción de condición “if“ condiciona la ejecución

PROGRAMACION La Instrucción de condición “if” La instrucción de condición “if“ condiciona la ejecución de un bloque de programa If ( n. Val == 25 ) n. My = 47; If ( n. Val == 25 ) { // bloque condicionado }

PROGRAMACION La Instrucción de condición “if - else” La instrucción de condición “if ,

PROGRAMACION La Instrucción de condición “if - else” La instrucción de condición “if , else“ condiciona la ejecución de uno de 2 bloques de programa if ( n. Val == 25 ) { // bloque condicionado } else { // bloque condicionado } if ( n. Val == 25 ) n. Mi = 47; else { // bloque condicionado } 67/158

PROGRAMACION La Instrucción de condición “if –else if” La instrucción de condición “if ,

PROGRAMACION La Instrucción de condición “if –else if” La instrucción de condición “if , else if“ condiciona la ejecución de N bloques de programa If ( n. Val == 25 ) { // bloque condicionado } else if (n. Val == 47) { // bloque condicionado } else if (n. Control == 52) { // bloque condicionado } 68/158

PROGRAMACION La Instrucción de condición “if , else” La instrucción de condición “if, if

PROGRAMACION La Instrucción de condición “if , else” La instrucción de condición “if, if else “ condiciona la ejecución de N bloques de programa if ( n. Val == 25 ) { // bloque condicionado } else if (n. Val == 47) { // bloque condicionado } else { // bloque condicionado } 69/158

PROGRAMACION La Instrucción de iteración ”for” La instrucción de iteración “for“ condiciona la repetición

PROGRAMACION La Instrucción de iteración ”for” La instrucción de iteración “for“ condiciona la repetición de un bloque de programa for ( int n. Val =0; n. Val<10; n. Val++ ) { // bloque condicionado } 70/158

PROGRAMACION La Instrucción de iteración ”for” La instrucción de iteración “for“ está compuesta de

PROGRAMACION La Instrucción de iteración ”for” La instrucción de iteración “for“ está compuesta de 3 campos separados por “; ” : for (n. V 1=0, n. V 2=15; n. V 1<10; n. V 1++, n. V 2 --) instrucción; 1) Inicialización de entrada 2) Condición de salida 3) Calculo al final del bloque 71/158

PROGRAMACION La Instrucción de iteración “while” La instrucción de iteración “while“ condiciona la repetición

PROGRAMACION La Instrucción de iteración “while” La instrucción de iteración “while“ condiciona la repetición de un bloque de programa int n. Val = 0; while( n. Val<10 ) { // bloque condicionado n. Val++; } 72/158

PROGRAMACION La Instrucción de condición “switch” La instrucción de condición “switch“ condiciona la ejecución

PROGRAMACION La Instrucción de condición “switch” La instrucción de condición “switch“ condiciona la ejecución de un bloque de programa entre otros int n. Val = 45; switch( n. Val ) { case 0: … // codigo ejecutado si n. Val vale 0 break; // detiene la ejecución case 34: break; default: break; } 73/158

PROGRAMACION La Instrucción de ruptura “break” La instrucción de ruptura de ejecución “break“ interrumpe

PROGRAMACION La Instrucción de ruptura “break” La instrucción de ruptura de ejecución “break“ interrumpe la ejecución de un bloque de programa for, while y switch int n. Val = 45; switch( n. Val ) { case 0: … // codigo ejecutado si n. Val vale 0 break; // detiene la ejecución } 74/158

PROGRAMACION La Instrucción de retorno “return” La instrucción de retorno “return“ interrumpe la ejecución

PROGRAMACION La Instrucción de retorno “return” La instrucción de retorno “return“ interrumpe la ejecución de un bloque de programa y manda la ejecución a la función que te llamó switch( n. Val ) { case 0: return; break; } // codigo ejecutado si n. Val vale 0 // regresa la ejecucion a la funcion superior // detiene la ejecución 75/158

PROGRAMACION Las Funciones (I) Las funciones son bloques de programas de uso general con

PROGRAMACION Las Funciones (I) Las funciones son bloques de programas de uso general con un encabezado y un cuerpo delimitado por “{“ y “}” • • • El nombre de una función sigue las reglas de nombres de variables Una función es una porción de código que ejecuta un calculo Una función puede tener n valores de entrada (parámetros) Una función debe tener un valor de retorno (puede ser void) Una función puede modificar el valor de un parámetro int funcion (int parametro 1); void funcion (int parametro 1, bool parametro 2); int funcion (int parametro 1); 76/158

PROGRAMACION Las Funciones (II) Ejemplo de función: int Suma(int n. Parametro 1, int n.

PROGRAMACION Las Funciones (II) Ejemplo de función: int Suma(int n. Parametro 1, int n. Parametro 2) { int n. Ret = n. Parametro 1 + n. Parametro 2; return n. Ret; } 77/158

PROGRAMACION Las clases 78/158

PROGRAMACION Las clases 78/158

PROGRAMACION Las Clases (I) Una clase es una estructura que tiene además: Funciones, un

PROGRAMACION Las Clases (I) Una clase es una estructura que tiene además: Funciones, un Constructor y un Destructor Una clase consta de: • Una Identidad, que lo diferencia de otros objetos (Nombre de la clase) • Métodos o funciones miembro • Atributos o variables miembro 79/158

PROGRAMACION Las Clases (II) class Punto { private: int id; protected: int x; int

PROGRAMACION Las Clases (II) class Punto { private: int id; protected: int x; int y; public: Punto(); ~Punto(); int Obtener. X(); int Obtener. Y(); } // Variables y miembro privada // Variables y miembro protegidas // Variables y miembro publicos // Constructor // Destructor // Funciones miembro o métodos 80/158

PROGRAMACION Las Clases (III) Una clase tiene miembros y atributos : • Públicos •

PROGRAMACION Las Clases (III) Una clase tiene miembros y atributos : • Públicos • Protegidos • Privados 81/158

PROGRAMACION Las Clases (IV) • Los atributos de una clase son variables propias a

PROGRAMACION Las Clases (IV) • Los atributos de una clase son variables propias a esa clase • Un atributo solo es conocido por su clase A esta propiedad se le llama “encapsulamiento” 82/158

PROGRAMACION Las Clases (V) Los miembros de una clase son funciones propias a esa

PROGRAMACION Las Clases (V) Los miembros de una clase son funciones propias a esa clase • • • El nombre de un miembro sigue las reglas de nombres de variables Un miembro conoce los atributos de su clase Un miembro es una porción de código que ejecuta un calculo Un miembro puede tener n valores de entrada (parámetros) Un miembro debe tener un valor de retorno (puede ser void) Un miembro puede modificar el valor de un parámetro int funcion (int parametro 1); void funcion (int parametro 1, bool parametro 2); int funcion (int parametro 1); 83/158

PROGRAMACION Las Clases (VI) Una clase tiene una función miembro llamado “constructor” • •

PROGRAMACION Las Clases (VI) Una clase tiene una función miembro llamado “constructor” • • • El constructor tiene el mismo nombre que la clase El constructor es publico El constructor es llamado siempre que se crea el objeto El constructor no tiene valor de retorno Una clase tiene un constructor predeterminado (default) class Punto { public: Punto(); … // Variables y miembro publicos // Constructor 84/158

PROGRAMACION Las Clases (VII) Una clase tiene una función miembro llamado “destructor” • •

PROGRAMACION Las Clases (VII) Una clase tiene una función miembro llamado “destructor” • • • El destructor tiene el mismo nombre que la clase precedido por el signo ~ El destructor es publico El destructor es llamado siempre cuando se destruye el objeto El destructor no tiene parámetros El destructor no tiene valor de retorno Una clase tiene un destructor predeterminado (default) class Punto { public: ~ Punto(); … // Variables y miembro publicos // Destructor 85/158

PROGRAMACION Las Clases (VII) El operador sizeof devuelve el tamaño de una clase Una

PROGRAMACION Las Clases (VII) El operador sizeof devuelve el tamaño de una clase Una clase sin miembros (datos) tiene un tamaño convencional de 6 bytes (según el compilador). 86/158

PROGRAMACION Las Clases (VIII) • Un valor de un tipo se llama VARIABLE •

PROGRAMACION Las Clases (VIII) • Un valor de un tipo se llama VARIABLE • Un valor de una clase se llama OBJETO int n. Mi. Valor = 45; // Variable int Punto Mi. Punto; // Objeto Punto Los OBJETOS son instancias de CLASES 87/158

PROGRAMACION Las Clases (VIII) Herencia múltiple C++ permite que una clases derive de dos

PROGRAMACION Las Clases (VIII) Herencia múltiple C++ permite que una clases derive de dos o más clases base. Es decir, la clase derivada comparte los atributos y los métodos de más de una clase. 88/158

PROGRAMACION 89/158

PROGRAMACION 89/158

PROGRAMACION Las Clases (VIII) Sintaxis de la derivación class <clase_derivada> : [public|private] <base 1>

PROGRAMACION Las Clases (VIII) Sintaxis de la derivación class <clase_derivada> : [public|private] <base 1> [, [public|private] <base 2>] {}; class CGeo. Rect : public CFloat. Rect, public CGeo. Line, public CGeo. Brush { }; 90/158

PROGRAMACION Las Clases (VIII) Las funciones virtuales • Una función virtual es un mecanismo

PROGRAMACION Las Clases (VIII) Las funciones virtuales • Una función virtual es un mecanismo que permite a clases derivadas redefinir a las funciones de las clases de base. • La virtualización de funciones y clases nos permite implementar una de las propiedades más potentes de POO: el polimorfismo. • Una función virtual es una función miembro que se espera volver a definir en clases derivadas. 91/158

PROGRAMACION Las Clases (VIII) Las funciones virtuales Cuando se hace referencia a un objeto

PROGRAMACION Las Clases (VIII) Las funciones virtuales Cuando se hace referencia a un objeto de una clase derivada mediante un puntero o una referencia a la clase base, se llama la función virtual para ese objeto y se ejecuta la versión de la clase derivada de la función. virtual void Get. Name(); 92/158

PROGRAMACION Las Clases (VIII) Las funciones virtuales Si una clase base contiene una función

PROGRAMACION Las Clases (VIII) Las funciones virtuales Si una clase base contiene una función declarada como virtual y una clase derivada define la misma función. La función de la clase derivada se invoca para los objetos de la clase derivada, aunque se llame mediante un puntero o una referencia a la clase base. 93/158

PROGRAMACION Las Clases (VIII) Las funciones virtuales 94/158

PROGRAMACION Las Clases (VIII) Las funciones virtuales 94/158

PROGRAMACION Las Clases (VIII) Las clases abstractas • Una clase que contiene al menos

PROGRAMACION Las Clases (VIII) Las clases abstractas • Una clase que contiene al menos una función pura virtual se considera una clase abstracta. • Una clase que declara la existencia de un método pero no los implementa, se considera una clase abstracta. • Una clase abstracta puede contener métodos no-abstractos pero al menos uno de los métodos debe ser declarado abstracto. • Las clases derivadas de la clase abstracta deben implementar la función virtual pura o seguirán siendo clases abstractas. 95/158

PROGRAMACION Las Clases (VIII) Las clases abstractas class Account { public: Account( double d

PROGRAMACION Las Clases (VIII) Las clases abstractas class Account { public: Account( double d ); virtual double Get. Balance(); virtual void Print. Balance() = 0; private: double _balance; }; // Constructor // Obtain balance // Pure virtual function 96/158

PROGRAMACION Las Clases (VIII) El polimorfismo • Es la habilidad que poseen los objetos

PROGRAMACION Las Clases (VIII) El polimorfismo • Es la habilidad que poseen los objetos para reaccionar de modo diferente ante los mismos mensajes. • El polimorfismo se refiere a la posibilidad de definir • múltiples clases con funcionalidad diferente, pero con métodos o propiedades denominados de forma idéntica, que pueden utilizarse de manera intercambiable mediante código cliente en tiempo de ejecución. 97/158

PROGRAMACION Las Clases (VIII) El polimorfismo • El Polimorfismo es la tercera característica esencial

PROGRAMACION Las Clases (VIII) El polimorfismo • El Polimorfismo es la tercera característica esencial de un lenguaje orientado a objetos, después de la abstracción de datos y la herencia. • En programación orientada a objetos se denomina polimorfismo a la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación. • El polimorfismo consiste en conseguir que un objeto de una clase se comporte como un objeto de cualquiera de sus subclases, dependiendo de la forma de llamar a los métodos de dicha clase o subclases. 98/158

PROGRAMACION Las Clases (VIII) El polimorfismo • El polimorfismo permite que podamos construirnos métodos

PROGRAMACION Las Clases (VIII) El polimorfismo • El polimorfismo permite que podamos construirnos métodos para nuestras clase derivadas que parten de una misma clase base, para que adopten comportamientos totalmente distintos. • Es un concepto realmente potente y que se lleva a cabo mediante la utilización de funciones virtuales. 99/158

PROGRAMACION Los operadores 100/158

PROGRAMACION Los operadores 100/158

PROGRAMACION Los Operadores Un operador es un elemento de programa que se aplica a

PROGRAMACION Los Operadores Un operador es un elemento de programa que se aplica a uno o varios operandos en una expresión o instrucción • Los operadores que requieren un operando, como el operador de incremento (++) se conocen como operadores unarios. • Los operadores que requieren dos operandos, como los operadores aritméticos (+, -, *, /) se conocen como operadores binarios. • El operador condicional (? : ), utiliza tres operandos y es el único operador ternario de C++ 101/158

PROGRAMACION Los Operadores Existen 6 tipos de operadores según su función: 1. 2. 3.

PROGRAMACION Los Operadores Existen 6 tipos de operadores según su función: 1. 2. 3. 4. 5. 6. Aritméticos Relacionales De asignación Lógicos De dirección De manejo de Bits 102/158

PROGRAMACION Los Operadores Los operadores de asignación binarios 103/158

PROGRAMACION Los Operadores Los operadores de asignación binarios 103/158

PROGRAMACION Los Operadores Los operadores aritméticos 104/158

PROGRAMACION Los Operadores Los operadores aritméticos 104/158

PROGRAMACION Los Operadores Los operadores ++ y -Los operadores unarios ++ y – actúan

PROGRAMACION Los Operadores Los operadores ++ y -Los operadores unarios ++ y – actúan según su posición: • Si el operador precede a la variable, se conoce como preincremento o pre-decremento (++n) • Si el operador es posterior a la variable (n++) se encuentra en la forma posfija y se le llama pos-incremento o pos-decremento 105/158

PROGRAMACION Los Operadores Los operadores unarios ++ y -Cuando un operador de incremento o

PROGRAMACION Los Operadores Los operadores unarios ++ y -Cuando un operador de incremento o decremento precede a su variable, se llevará a cabo la operación de incremento o de decremento antes de utilizar el valor del operando. int x, y, z; x = 2004; y = ++x; z = --y; // x e y valen 2005 // z e y valen 2004 106/158

PROGRAMACION Los Operadores Los operadores unarios ++ y -Cuando un operador de incremento o

PROGRAMACION Los Operadores Los operadores unarios ++ y -Cuando un operador de incremento o decremento sucede a su variable, se llevará a cabo la operación de incremento o de decremento después de utilizar el valor del operando. int x, y, z; x = 2004; y = x++; z = y--; // x vale 2005 , y vale 2004 // z vale 2004 , y vale 2003 107/158

PROGRAMACION Los Operadores Los operadores binarios relacionales Los operadores relacionales, se utilizan para comprobar

PROGRAMACION Los Operadores Los operadores binarios relacionales Los operadores relacionales, se utilizan para comprobar la veracidad o falsedad de propuestas de relación. 108/158

PROGRAMACION Los Operadores Los operadores lógicos producen un resultado booleano, y sus operandos son

PROGRAMACION Los Operadores Los operadores lógicos producen un resultado booleano, y sus operandos son también valores lógicos o asimilables a ellos (los valores numéricos son asimilados a cierto o falso según su valor sea cero o distinto de cero). 109/158

PROGRAMACION Los Operadores Los operadores de manejo de bits Los operadores de movimiento de

PROGRAMACION Los Operadores Los operadores de manejo de bits Los operadores de movimiento de bits convierten una determinada cantidad a su equivalente en bits para posteriormente realizar un desplazamiento de dicho valor. 110/158

PROGRAMACION Los Operadores Los operadores de dirección C++ dispone de dos operadores específicos para

PROGRAMACION Los Operadores Los operadores de dirección C++ dispone de dos operadores específicos para los apuntadores y de referencia: 1. La indirección “*” 2. La referencia “&” 111/158

PROGRAMACION La conversión de tipos (casting) Un “cast” es un operador que convierte un

PROGRAMACION La conversión de tipos (casting) Un “cast” es un operador que convierte un tipo de dato en otro tipo de dato. El casting es una operación unaria. Sintaxis: (type) expression En el cual “type” es el tipo de dato esperado. 112/158

PROGRAMACION La conversión de tipos (casting) char a(´b´); flost f. Size; int n =

PROGRAMACION La conversión de tipos (casting) char a(´b´); flost f. Size; int n = (int)a; int n. Size = (int)f. Size; float f. T = (float)n; 113/158

PROGRAMACION Los operadores de clases La sobrecarga de operadores en el interior de una

PROGRAMACION Los operadores de clases La sobrecarga de operadores en el interior de una clase se asume que el primer operando es el propio objeto de la clase donde se define el operador. Debido a esto, sólo se necesita especificar un operando. Sintaxis: <tipo> operator<operador binario>(<tipo> <identificador>); Normalmente el <tipo> es la clase para la que estamos sobrecargando el operador, tanto en el valor de retorno como en el parámetro 114/158

PROGRAMACION Los operadores de clases El operador de asignación • El compilador crea un

PROGRAMACION Los operadores de clases El operador de asignación • El compilador crea un operador de asignación por defecto para tipos simples. • El compilador NO puede copiar un objeto cuando este contiene un apuntador a otro objeto. class Account { public: int m_n. Age; COther. Class * p. Other. Class; }; 115/158

PROGRAMACION Los operadores de clases El operador de asignación. h CFloat. Point & operator=(CFloat.

PROGRAMACION Los operadores de clases El operador de asignación. h CFloat. Point & operator=(CFloat. Point & Pt); // declaración de operador. cpp CFloat. Point & CFloat. Point: : operator=(CFloat. Point & Pt) { if ( this != &Pt ) { m_X = Pt. m_X; m_Y = Pt. m_Y; m_Z = Pt. m_Z; } return *this; } // operateur = 116/158

PROGRAMACION Los operadores de clases El operador de asignación double CFloat. Point: : Distance(CFloat.

PROGRAMACION Los operadores de clases El operador de asignación double CFloat. Point: : Distance(CFloat. Point & f. Pt. Other) { CFloat. Point f. Vector = f. Pt. Other - *this; return f. Vector. Get. Modulo(); } CFloat. Point f. Pt 1(0, 0, 0), f. Pt 2(10, 10); Double f. Dist = f. Pt 1. Distance(f. Pt 2); 117/158

PROGRAMACION Funciones de conversión El operador de asignación Es posible convertir explícitamente una clase

PROGRAMACION Funciones de conversión El operador de asignación Es posible convertir explícitamente una clase en otra clase. Sintaxis: conversion-function-name: operator conversion-type-name () 118/158

PROGRAMACION Funciones de conversión El operador de asignación class Money { public: operator Amount()

PROGRAMACION Funciones de conversión El operador de asignación class Money { public: operator Amount() { return m_d. Amount; } private: double m_d. Amount; }; int main() { Money Account; double Cash. On. Hand = Account; } 119/158

PROGRAMACION Funciones de conversión El operador de asignación class CFloat. Point { protected: double

PROGRAMACION Funciones de conversión El operador de asignación class CFloat. Point { protected: double m_X; double m_Y; double m_Z; public: operator CPoint() { return CPoint((int)m_X, (int)m_Y); } int main() { CFloat. Point f. Pt(10, 20, 30); CPoint Pt = (CPoint) f. Pt; } 120/158

PROGRAMACION La asignación dinámica de la memoria El operador new El operador unario new

PROGRAMACION La asignación dinámica de la memoria El operador new El operador unario new sirve para reservar memoria dinámicamente El operador new llama el constructor ad-hoc de la clase a la que se le está aplicando. int n. Age = 23; CString s. Name(“Tecnito”); STUDEN * p. Student = new Student; STUDENT * p. Student = new Student(s. Name, n. Age); Int * pn = new int(23); char * p. Array = new char[20]; 121/158

PROGRAMACION La asignación dinámica de la memoria El operador delete sirve para liberar la

PROGRAMACION La asignación dinámica de la memoria El operador delete sirve para liberar la memoria dinámicamente El operador delete es un operador unario que llama al destructor de la clase a la que se le está aplicando. STUDEN * p. Student = new Student; Int * pn = new int(23); char * p. Array = new char[20]; delete p. Student; delete pn; delete p. Array; 122/158

PROGRAMACION La asignación dinámica de arreglos El operador new La asignación dinámica de un

PROGRAMACION La asignación dinámica de arreglos El operador new La asignación dinámica de un arreglo utiliza el operador new. El operador [n] indica al operador new que debe generar un arreglo de datos contiguos del mismo tipo y de dimensión n. int * pn = new int(23); int * pn. A = new int[23]; char * p. Array = new char[20]; // genera un int de valor 23 // genera un arreglo de 23 int // genera un arreglo de 20 caracteres 123/158

PROGRAMACION La asignación dinámica de arreglos El operador delete sirve para liberar la memoria

PROGRAMACION La asignación dinámica de arreglos El operador delete sirve para liberar la memoria dinámicamente • El operador delete es un operador unario que llama al destructor del arreglo a la que se le está aplicando. • El operador delete debe de aplicarse al apuntador del arreglo precedido del operador []. char * p. Array = new char[20]; delete [] p. Array; // genera un arreglo de 20 caracteres 124/158

PROGRAMACION La asignación dinámica de arreglos El operador delete Si el operador delete se

PROGRAMACION La asignación dinámica de arreglos El operador delete Si el operador delete se aplica a un apuntador que no apunta al arreglo si no a un elemento el resultado es impredecible // NUMERO TRIANGULAR int s. Suma(0); int* pn. Data = new int[20]; // genera un arreglo de 20 enteros for (int i=0; i<20; i++) *(pn. Data++) = i; // asigna valor a cada element for (int i=0; i<20; i++) n. Suma += *(pn. Data++); // ERROR ! delete [] pn. Data; // HORROR ! 125/158

PROGRAMACION Las funciones 126/158

PROGRAMACION Las funciones 126/158

PROGRAMACION La declaración de una función Las funciones son un conjunto de instrucciones que

PROGRAMACION La declaración de una función Las funciones son un conjunto de instrucciones que realizan una tarea específica. • Las funciones toman ciertos valores de entrada, llamados parámetros (argumentos) y proporcionan un valor de salida o valor de retorno. • En C++ 2 funciones pueden tener el mismo nombre siempre y cuando presenten parámetros diferentes. • Un prototipo de una función debe de ser declarado previamente a su uso. • Una función siempre tiene un valor de retorno, que puede ser void • Una función puede tener una lista de parámetros variable, si los parámetros tienen un valor por default 127/158

PROGRAMACION La declaración de una función Sintaxis: [<tipo_valor_retorno>[modificadores] <identificador>(<lista_parámetros>) { [sentencias] } int Mi.

PROGRAMACION La declaración de una función Sintaxis: [<tipo_valor_retorno>[modificadores] <identificador>(<lista_parámetros>) { [sentencias] } int Mi. Clase: : suma(int n 1, int n 2) { int n. Suma = n 1 + n 2; return n. Suma; } 128/158

PROGRAMACION La declaración de una función El paso de argumentos Los parámetros pueden pasarse

PROGRAMACION La declaración de una función El paso de argumentos Los parámetros pueden pasarse de 3 maneras: 1. Valor (no modificables y lento) 2. Apuntador o dirección (acceso total, sintaxis complicada) 3. Referencia (igual que por apuntador pero con sintaxis simplificada) 129/158

PROGRAMACION La declaración de una función El paso de argumentos Los arreglos deben de

PROGRAMACION La declaración de una función El paso de argumentos Los arreglos deben de pasarse por su dirección: . h void Funcion. Char(char * p. Char); . cpp char * p. Data = new char[1024]; Funcion. Char(p. Data); 130/158

PROGRAMACION Las funciones virtuales • Una función virtual o método virtual es una función

PROGRAMACION Las funciones virtuales • Una función virtual o método virtual es una función cuyo comportamiento, al ser declarado "virtual“ es determinado por la definición de una función con el mismo prototipo en alguna de sus subclases (derivadas) • La virtualización de funciones y clases nos permite implementar una de las propiedades más potentes de POO: el polimorfismo. virtual void Serialize(CArchive& ar); 131/158

PROGRAMACION Las sobrecarga de funciones virtuales La sobrecarga o "overriding“ es la derivación de

PROGRAMACION Las sobrecarga de funciones virtuales La sobrecarga o "overriding“ es la derivación de una clase en la cual se redefine una función virtual que ya existía en la clase de base. La definición de la función en la clase derivada oculta la definición previa en la clase base. Es posible acceder a la función oculta de la clase base mediante su nombre completo: CBase. Clas: : Funcion. Virtual(); 132/158

PROGRAMACION Funciones con numero de argumentos indeterminados • Los parámetros conocidos se declaran de

PROGRAMACION Funciones con numero de argumentos indeterminados • Los parámetros conocidos se declaran de manera “normal” • Debe de existir al menos 1 parámetro normal • Los parámetros desconocidos se sustituyen por tres puntos (. . . ) Sintaxis: <tipo_valor_retorno> <identificador>(<lista_parámetros_conocidos>, . . . ); • Los parámetros se pasan usando la pila • Puede usarse uno de los parámetros conocidos para pasar a la función la cuenta de los parámetros desconocidos • La función debe conocer el tipo de cada parámetro (e. g. printf) 133/158

PROGRAMACION El C++ DE MFC 134/158

PROGRAMACION El C++ DE MFC 134/158

PROGRAMACION El C++ de MFC redefine la mayoría de los símbolos utilizados por el

PROGRAMACION El C++ de MFC redefine la mayoría de los símbolos utilizados por el lenguaje C estándar. typedef unsigned long typedef int typedef unsigned short typedef float typedef FLOAT typedef BOOL near typedef BOOL far typedef BYTE near typedef BYTE far typedef int near typedef int far typedef WORD near typedef WORD far typedef long far typedef DWORD near typedef DWORD far typedef void far typedef CONST void far typedef int typedef unsigned int DWORD; BOOL; BYTE; WORD; FLOAT; *PBOOL; *LPBOOL; *PBYTE; *LPBYTE; *PINT; *LPINT; *PWORD; *LPLONG; *PDWORD; *LPVOID; *LPCVOID; INT; UINT; *PUINT; 135/158

PROGRAMACION El C++ de MFC ASSERT_VALID La función ASSERT_VALID prueba la validez de un

PROGRAMACION El C++ de MFC ASSERT_VALID La función ASSERT_VALID prueba la validez de un objeto Sintaxis: ASSERT_VALID( p. Object ); Si el objeto no es un objeto válido la versión DEBUG del programa ejecutable genera una excepción. ASSERT_VALID es ignorada en la versión RELEASE del ejecutable. 136/158

PROGRAMACION El C++ de MFC Las Excepciones. TRY & CATCH y END_CATCH Cuando una

PROGRAMACION El C++ de MFC Las Excepciones. TRY & CATCH y END_CATCH Cuando una excepción es encontrada, el common language runtime (CLR) busca el bloque CATCH que trata esta excepción y le pasa la ejecución. Si no encuentra ningún bloque, envía un mensaje al usuario y detiene la ejecución del programa. La manipulación de excepciones consiste en transferir la ejecución del programa desde el punto donde se produce la excepción a un manipulador que coincida con el motivo de la excepción. 137/158

PROGRAMACION El C++ de MFC Las Excepciones. TRY & CATCH y END_CATCH Las excepciones

PROGRAMACION El C++ de MFC Las Excepciones. TRY & CATCH y END_CATCH Las excepciones son errores irrecuperables que se producen a la ejecución de un programa (división por cero). • Cualquier línea de código puede originar una excepción • El bloque TRY & CATCH permite detectar y atrapar excepciones. • El bloque TRY & CATCH consiste en un bloque TRY seguido uno o mas bloques CATCH, cada bloque especifica como atrapar las diferentes excepciones. 138/158

PROGRAMACION El C++ de MFC Las Excepciones. TRY & CATCH y END_CATCH int *

PROGRAMACION El C++ de MFC Las Excepciones. TRY & CATCH y END_CATCH int * px; int y = 10000; TRY{ px = new int[y]; px[0] = 10; cout << "Puntero: " << (void *) x << endl; delete[] px; } CATCH: : bad_alloc&) { cout << "Memoria insuficiente" << endl; } El objeto bad_alloc es el asociado a excepciones consecuencia de aplicar el operador new 139/158

PROGRAMACION El C++ de MFC Las Excepciones. TRY & CATCH y END_CATCH La expresión

PROGRAMACION El C++ de MFC Las Excepciones. TRY & CATCH y END_CATCH La expresión throw se comporta como un return. El valor devuelto por el throw se asigna al objeto del catch adecuado. Los tipos de la expresión del throw y el especificado en el catch deben coincidir. 140/158

PROGRAMACION LAS CLASES DE DATOS MFC 141/158

PROGRAMACION LAS CLASES DE DATOS MFC 141/158

PROGRAMACION Las clases de datos MFC CPoint • CPoint es la clase punto del

PROGRAMACION Las clases de datos MFC CPoint • CPoint es la clase punto del GDI de MFC • CPoint contiene 2 miembros (int x , int y) y los métodos para manipular el punto. • Las coordenadas del punto se consideran positivas hacia abajo y hacia la derecha. • Las funciones GDI toman como parámetro un CPoint 142/158

PROGRAMACION Las clases de datos MFC CRect • CRect es la clase rectangulo del

PROGRAMACION Las clases de datos MFC CRect • CRect es la clase rectangulo del GDI de MFC • CRect contiene 4 miembros (int left, int top, int right , int bottom) y los métodos para manipular el rectangulo. • El rectángulo definido por CRect siempre tiene los 4 lados paralelos a la ventana (window) • Las funciones de CRect consideran que el lado superior es menior al lado inferior (top < bottom) • Las funciones GDI toman como parámetro un CRect 143/158

PROGRAMACION Las clases de datos MFC CSize • CSize es la clase vector del

PROGRAMACION Las clases de datos MFC CSize • CSize es la clase vector del GDI de MFC • CSize contiene 2 miembros (int cx, int cy) y los métodos para manipular el vector. • Las funciones GDI toman como parámetro un CSize 144/158

PROGRAMACION Las clases de datos MFC CString • CString es una clase de cadenas

PROGRAMACION Las clases de datos MFC CString • CString es una clase de cadenas alfanuméricas • Las funciones MFC toman como parámetro un CString 145/158

PROGRAMACION LAS CLASES DE COLECCIONES 146/158

PROGRAMACION LAS CLASES DE COLECCIONES 146/158

PROGRAMACION Las clases de datos MFC Las Colecciones Las clases de colección sirven para

PROGRAMACION Las clases de datos MFC Las Colecciones Las clases de colección sirven para administrar grupos de objetos. Existen 3 tipos de colecciones: • CArray • CList • CMap 147/158

PROGRAMACION Las clases de datos MFC La Colección CArray La clase CArray proporciona una

PROGRAMACION Las clases de datos MFC La Colección CArray La clase CArray proporciona una matriz de objetos indizada por números enteros, ordenada y con el tamaño ajustado dinámicamente. Existen 2 tipos básicos de colección CArray: Contenido de la colección Matrices Colecciones de objetos de cualquier tipo CArray Colecciones de apuntadores a objetos de cualquier tipo CTyped. Ptr. Array 148/158

PROGRAMACION Las clases de datos MFC La Colección CArray Matrices Las clases predefinidas (sin

PROGRAMACION Las clases de datos MFC La Colección CArray Matrices Las clases predefinidas (sin plantilla) COb. Array CByte. Array CDWord. Array CPtr. Array CString. Array CWord. Array CUInt. Array 149/158

PROGRAMACION Las clases de datos MFC La Colección CList La clase CList proporciona una

PROGRAMACION Las clases de datos MFC La Colección CList La clase CList proporciona una lista de objetos ordenados sin indizar, implementada como una lista doblemente ligada. Existen 2 tipos básicos de colección CList: Contenido de la colección Listas Colecciones de objetos de cualquier tipo CList Colecciones de apuntadores a objetos de cualquier tipo CTyped. Ptr. List 150/158

PROGRAMACION Las clases de datos MFC La Colección CList Las clases predefinidas (sin plantilla)

PROGRAMACION Las clases de datos MFC La Colección CList Las clases predefinidas (sin plantilla) Matrices COb. List CPtr. List CString. List 151/158

PROGRAMACION Las clases de datos MFC La Colección CMap • La clase CMap es

PROGRAMACION Las clases de datos MFC La Colección CMap • La clase CMap es una colección que asocia un objeto clave a un objeto de valor. • Un Mapa es también conocido como un diccionario. • CMap está implementado para que dada una llave, el elemento correspondiente sea encontrado muy rápidamente. • MFC utiliza CMap para almacenar los HANDLES (correlaciona HWND´s a CWnd´s, HPEN´s a CPen´s, y así con todos loa objetos sistema. ) 152/158

PROGRAMACION Las clases de datos MFC La Colección CMap Existen 2 tipos básicos de

PROGRAMACION Las clases de datos MFC La Colección CMap Existen 2 tipos básicos de colección CMap: Contenido de la colección Listas Colecciones de objetos de cualquier tipo CMap Colecciones de apuntadores a objetos de cualquier tipo CTyped. Ptr. Map 153/158

PROGRAMACION Las clases de datos MFC La Colección CMap Las clases predefinidas (sin plantilla)

PROGRAMACION Las clases de datos MFC La Colección CMap Las clases predefinidas (sin plantilla) Matrices CMap. Ptr. To. Word CMap. Ptr. To. Ptr CMap. String. To. Ob CMap. String. To. Ptr CMap. String. To. String CMap. Word. To. Ob CMap. Word. To. Ptr 154/158

PROGRAMACION Class Name Description CMap. Word. To. Ptr Stores void pointers keyed by WORDs

PROGRAMACION Class Name Description CMap. Word. To. Ptr Stores void pointers keyed by WORDs CMap. Ptr. To. Word Stores WORDs keyed by void pointers CMap. Ptr. To. Ptr Stores void pointers keyed by other void pointers CMap. Word. To. Ob Stores CObject pointers keyed by WORDs CMap. String. To. Ob Stores CObject pointers keyed by strings CMap. String. To. Ptr Stores void pointers keyed by strings CMap. String. To. String Stores strings keyed by other strings 155/158

PROGRAMACION Las clases de datos MFC Características de las formas de colección Forma ¿Ordenada?

PROGRAMACION Las clases de datos MFC Características de las formas de colección Forma ¿Ordenada? Insertar un Buscar un ¿Duplicar ¿Indizada? elementos? especificado CArray Matriz Sí Por entero Lento Sí CLista Sí No Rápido Lento Sí CMap Mapa No Por clave Rápido No (claves) Sí (valores) 156/158

157/158

157/158