Descargar la presentación
La descarga está en progreso. Por favor, espere
1
INTRODUCCION A LA PROGRAMACION
INSTITUTO TECNOLOGICO DE VERACRUZ INTRODUCCION A LA PROGRAMACION © Dr. José Antonio Garrido Natarén 2016
2
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.
3
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.
4
El Lenguaje C PROGRAMACION 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
5
PROGRAMACION El programa C++ mas pequeño int main() { return 0; }
6
PROGRAMACION LAS VARIABLES
7
PROGRAMACION Tamaño de tipos básicos
8
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 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 C++ no tiene un tipo byte integrado. Utilice un carácter sin signo para representar un valor byte. unsigned int Opción predeterminada para los marcadores de bits. long long Representa valores enteros muy grandes.
9
PROGRAMACION Tipos de datos Caracteres: char, CHAR ´a´
Enteros: short, int, long 128, 4726, Punto flotante: float, double , Booleanos: bool, BOOL true, false, TRUE, FALSE Vacío: void -
10
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.
11
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.
12
La notación húngara (MS)
Prefijo Significado b Booleano (int) c Carácter (un byte) dw Entero largo de 32 bits sin signo (double word) f Flags empaquetados en un entero de 16 bits h Manipulador de 16 bits (handle) l Entero largo de 32 bits lp Puntero a entero largo de 32 bits lpfn Puntero largo a una función que devuelve un entero lpsz Puntero largo a una cadena terminada con cero n Entero de 16 bits p Puntero a entero de 16 bits pt Coordenadas (x, y) empaquetadas en un entero de 32 bits rgb Valor de color RGB empaquetado en un entero de 32 bits sz Cadena terminada en cero w Entero corto de 16 bits sin signo (word)
13
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 nValue,nAge; Char sName;
14
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;
15
PROGRAMACION Los comentarios
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
16
PROGRAMACION Las Estructuras (I)
Una estructura es un conjunto de diferentes tipos de datos asociados a un tipo. struct Alumno { Char cName[10] = “miguel”; // nombre int nEdad; // edad int nYear; // año de nacimiento int nControl; // numero de control };
17
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
18
PROGRAMACION Las Estructuras (II)
Una estructura es un tipo de variable. Alumno MiAlumno, OtroAlumno; // declaracion MiAlumno. cName = “miguel”; // nombre MiAlumno. nEdad = 23; // edad MiAlumno. nControl = // numero de control OtroAlumno = MiAlumno;
19
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 MiAlumno; // declaracion MiAlumno. cName = “miguel”; // nombre MiAlumno. nEdad = 23; // edad MiAlumno. nControl = // numero de control
20
PROGRAMACION Las Estructuras (III) Sintaxis general de struct
struct [ <nombre tipo de estructura > ] { [ <tipo> <nombre-variable[, nombre-variable, ...]> ] ; [ <tipo> <nombre-variable[, nombre-variable, ...]> ] ; ... } [ <variables de estructura> ] ; *.h structStudent { int nAge; char[50] sName; } STUDENT, *LPSTUDENT;
21
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 structStudent EstudianteMecatronica; int nEdad = EstudianteMecatronica.nAge; char * pName = EstudianteMecatronica.sName;
22
PROGRAMACION Las Estructuras (III) Estructuras anidadas
Una estructura puede contener otra estructura. *.h structResident{ structStudent Student; char[50] sCompany; } RESIDENT, *LPRESIDENT; *.cpp structResident ResidenteMecatronica; char * pName = ResidenteMecatronica.Student.sName;
23
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
24
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 unionValores { int ival; float fval; str sval; } VALORES, * LPVALORES;
25
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
26
PROGRAMACION Las Estructuras (III) El operador sizeof
El operador sizeof devuelve el tamaño de una estructura *.h structResident { structStudent Student; char[50] sCompany; } RESIDENT, *LPRESIDENT; *.cpp Int nSize = sizeof(RESIDENT); // nSize vale 102
27
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};
28
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 cInicial; short sEdad; int nYear; float fPi;
29
PROGRAMACION Las variables (II) Una variable guarda un valor:
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: cInicial = ´a´; nEdad = 33; nYear = 2016; fPi = ;
30
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 unionValores { int ival; float fval; str sval; } VALORES, * LPVALORES; *.cpp VALORES MiValor ; MiValor.iVal = 12;
31
PROGRAMACION Las variables (III)
Se pueden inicializar muchas variables en una sola línea separadas por ´,´ *.cpp VALORES MiValor ,TuValor; Las variables de tipo conocidas se inicializan a ´0´, a ´NULO´ o a ´VACIO´ *.cpp VALORES MiValor ; // MiValor.iVal = 0; // MiValor.fVal = 0; // MiValor.sVal = ´´;
32
PROGRAMACION Las variables (III) *.cpp int nVal(12),fVal(3.1415);
Se pueden inicializar una variable con su constructor natural. *.cpp int nVal(12),fVal(3.1415); char * pnName(NULL);
33
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.
34
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 nX = 1; // se declara x como global. int main() { …..
35
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.
36
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.
37
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.
38
PROGRAMACION Las variables (III) Syntaxis:
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 FlagType; typedef enum FIGURETYPE {FT_POLYLINE=1,FT_POLYGON};
39
PROGRAMACION Las variables (III) Syntaxis 1:
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 = ; //Definimos una constante llamada PI
40
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 nCount = 0; }
41
PROGRAMACION Los apuntadores Y las referencias
42
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 * lpcInicial = &cInicial; short * lpnEdad = &nEdad; int * lpnYear = &nYear; float * lpfPi = &fPi; El símbolo “&” representa la dirección de la memoria de una variable
43
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 * lpcInicial; short * lpnEdad; int * lpnYear; float * lpfPi;
44
PROGRAMACION Los apuntadores
Si el valor de un apuntador se declara como short * lpnEdad = &nEdad; Entonces… lpnEdad // apunta a la dirección de la variable nEdad *lpnEdad // Representa el valor nEdad
45
PROGRAMACION Los apuntadores Apuntadores constantes
const int *p = &a; //objeto constante y puntero variable
46
PROGRAMACION Los apuntadores
Un apuntador se inicializa automaticamente con el valor NULL short * lpnEdad; Es lo mismo que short * lpnEdad(NULL); NULL, es el espacio en memoria con dirección 0 NULL no es un valor 0
47
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.
48
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; }
49
PROGRAMACION Los apuntadores
Los operadores de incremento (++) y decremento (--) se aplican con los apuntadores. char sName[20]; char * pchar = sName; // apunta al carácter sName[0] pchar++; // apunta al carácter sName[1]
50
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 MiAlumno; // declaracion Alumno * pOtroAlumno = & MiAlumno; pOtroAlumno->cName = “miguel”; // nombre pOtroAlumno->nEdad = 23; // edad pOtroAlumno->nControl = ;// numero de control
51
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.
52
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.
53
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.
54
PROGRAMACION Los parámetros de funciones por referencias
Existen 3 maneras de pasar parámetros a una función: Por valor Por apuntador Por referencia
55
PROGRAMACION Los parámetros de funciones por referencias
El paso de datos por referencia a una función es el mas aconsejado por: Se accede a la variable naturalmente Es mas rápido y económico Permite modificar los valores pasados
56
PROGRAMACION Los arreglos de datos
57
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 nArreglo[100]; // declara un vector de 100 valores enteros Un arreglo de 2 dimensiones de declara como: int nArreglo[10][10]; // declara 100 valores enteros en 2 dimensiones
58
PROGRAMACION Los arreglos (II)
Un elemento del arreglo se identifica con un índice: int nValor = nArreglo[15]; // recupera el valor 16 int nValor = nArreglo[i]; // recupera el valor i int nValor = nArreglo[i][j]; // recupera el valor i,j El primer elemento de un arreglo es el valor 0: int nFirst = nValor[0]; // primer valor del arreglo El ultimo valor del arreglo es el N-1: int nLast = nValor[99]; // ultimo valor del arreglo
59
PROGRAMACION Los arreglos (II) Los arreglos y los apuntadores.
El nombre de un arreglo es la dirección del arreglo char sName[20]; char * pName = (char*)sName; Que es equivalente a: char * pName = &sName[0];
60
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 sName[20]; sName[0] = ´p´; sName[1] = ´e´; sName[2] = ´p´; sName[3] = ´e´; sName[4] = 0; // sName vale “pepe”
61
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 sName[20]; char sLetra = sName[n]; // sLetra contiene al elemento n Un apuntador permite navegar en un arreglo char * pLetra = sName; pLetta += n; // *pLetra contiene al elemento n
62
PROGRAMACION Las sentencias
63
PROGRAMACION Las Instrucciones (I)
Asignacion = if if – else if – else if for while switch break; return Las instrucciones controlan el flujo de ejecución de un programa
64
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
65
PROGRAMACION La Instrucción de asignación “=“
La instrucción de asignación “=“ asigna un valor a una variable int nVal = 45;
66
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 ( nVal == 25 ) nMy = 47; If ( nVal == 25 ) { // bloque condicionado }
67
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 ( nVal == 25 ) { // bloque condicionado } else if ( nVal == 25 ) nMi = 47; else { // bloque condicionado }
68
PROGRAMACION La Instrucción de condición “if –else if”
If ( nVal == 25 ) { // bloque condicionado } else if (nVal == 47) else if (nControl == 52) La instrucción de condición “if , else if“ condiciona la ejecución de N bloques de programa
69
PROGRAMACION La Instrucción de condición “if , else if , else”
if ( nVal == 25 ) { // bloque condicionado } else if (nVal == 47) else La instrucción de condición “if, if else, if else “ condiciona la ejecución de N bloques de programa
70
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 nVal =0; nVal<10; nVal++ ) { // bloque condicionado }
71
PROGRAMACION La Instrucción de iteración ”for”
La instrucción de iteración “for“ está compuesta de 3 campos separados por “;” : for (nV1=0,nV2=15;nV1<10;nV1++,nV2--) instrucción; Inicialización de entrada Condición de salida Calculo al final del bloque
72
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 nVal = 0; while( nVal<10 ) { // bloque condicionado nVal++; }
73
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 nVal = 45; switch( nVal ) { case 0: … // codigo ejecutado si nVal vale 0 break; // detiene la ejecución case 34: break; default: }
74
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 nVal = 45; switch( nVal ) { case 0: … // codigo ejecutado si nVal vale 0 break; // detiene la ejecución }
75
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( nVal ) { case 0: // codigo ejecutado si nVal vale 0 return; // regresa la ejecucion a la funcion superior break; // detiene la ejecución }
76
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 parametro1); void funcion (int parametro1, bool parametro 2);
77
PROGRAMACION Las Funciones (II)
Ejemplo de función: int Suma(int nParametro1, int nParametro2) { int nRet = nParametro1 + nParametro2; return nRet; }
78
PROGRAMACION Las clases
79
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
80
PROGRAMACION Las Clases (II) class Punto {
private: // Variables y miembro privada int id; protected: // Variables y miembro protegidas int x; int y; public: // Variables y miembro publicos Punto(); // Constructor ~Punto(); // Destructor int ObtenerX(); // Funciones miembro o métodos int ObtenerY(); }
81
PROGRAMACION Las Clases (III) Una clase tiene miembros y atributos :
Públicos Protegidos Privados
82
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”
83
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 parametro1); void funcion (int parametro1, bool parametro 2);
84
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: // Variables y miembro publicos Punto(); // Constructor …
85
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: // Variables y miembro publicos ~ Punto(); // Destructor …
86
PROGRAMACION Las Clases (VII) El operador sizeof
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).
87
PROGRAMACION Las Clases (VIII) Los OBJETOS son instancias de CLASES
Un valor de un tipo se llama VARIABLE Un valor de una clase se llama OBJETO int nMiValor = 45; // Variable int Punto MiPunto; // Objeto Punto Los OBJETOS son instancias de CLASES
88
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.
89
PROGRAMACION
90
PROGRAMACION Las Clases (VIII) Sintaxis de la derivación
class <clase_derivada> : [public|private] <base1> [,[public|private] <base2>] {}; class CGeoRect : public CFloatRect, public CGeoLine, public CGeoBrush { };
91
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.
92
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 GetName();
93
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.
94
PROGRAMACION Las Clases (VIII) Las funciones virtuales
95
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.
96
PROGRAMACION Las Clases (VIII) Las clases abstractas class Account {
public: Account( double d ); // Constructor virtual double GetBalance(); // Obtain balance virtual void PrintBalance() = 0; // Pure virtual function private: double _balance; };
97
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.
98
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.
99
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.
100
PROGRAMACION Los operadores
101
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++
102
PROGRAMACION Los Operadores
Existen 6 tipos de operadores según su función: Aritméticos Relacionales De asignación Lógicos De dirección De manejo de Bits
103
PROGRAMACION Los Operadores Los operadores de asignación binarios
104
PROGRAMACION Los Operadores Los operadores aritméticos
105
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 pre-incremento 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
106
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; // x e y valen 2005 z = --y; // z e y valen 2004
107
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++; // x vale 2005 , y vale 2004 z = y--; // z vale 2004 , y vale 2003
108
PROGRAMACION Los Operadores Los operadores binarios relacionales
Los operadores relacionales, se utilizan para comprobar la veracidad o falsedad de propuestas de relación.
109
PROGRAMACION Los Operadores Los operadores lógicos
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).
110
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.
111
PROGRAMACION Los Operadores Los operadores de dirección
C++ dispone de dos operadores específicos para los apuntadores y de referencia: La indirección “*” La referencia “&”
112
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.
113
PROGRAMACION La conversión de tipos (casting) char a(´b´);
flost fSize; int n = (int)a; int nSize = (int)fSize; float fT = (float)n;
114
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
115
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_nAge; COtherClass * pOtherClass; };
116
PROGRAMACION Los operadores de clases El operador de asignación .h
CFloatPoint & operator=(CFloatPoint & Pt); // declaración de operador .cpp CFloatPoint & CFloatPoint::operator=(CFloatPoint & Pt) // operateur = { if ( this != &Pt ) m_X = Pt.m_X; m_Y = Pt.m_Y; m_Z = Pt.m_Z; } return *this;
117
PROGRAMACION Los operadores de clases El operador de asignación
double CFloatPoint::Distance(CFloatPoint & fPtOther) { CFloatPoint fVector = fPtOther - *this; return fVector.GetModulo(); } CFloatPoint fPt1(0,0,0),fPt2(10,10,10); Double fDist = fPt1.Distance(fPt2);
118
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 ()
119
PROGRAMACION Funciones de conversión El operador de asignación
class Money { public: operator Amount() { return m_dAmount; } private: double m_dAmount; }; int main() Money Account; double CashOnHand = Account; }
120
PROGRAMACION Funciones de conversión El operador de asignación
class CFloatPoint { protected: double m_X; double m_Y; double m_Z; public: operator CPoint() { return CPoint((int)m_X,(int)m_Y); } int main() CFloatPoint fPt(10,20,30); CPoint Pt = (CPoint) fPt;
121
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 nAge = 23; CString sName(“Tecnito”); STUDEN * pStudent = new Student; STUDENT * pStudent = new Student(sName,nAge); Int * pn = new int(23); char * pArray = new char[20];
122
PROGRAMACION La asignación dinámica de la memoria El operador delete
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 * pStudent = new Student; Int * pn = new int(23); char * pArray = new char[20]; delete pStudent; delete pn; delete pArray;
123
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); // genera un int de valor 23 int * pnA = new int[23]; // genera un arreglo de 23 int char * pArray = new char[20]; // genera un arreglo de 20 caracteres
124
PROGRAMACION La asignación dinámica de arreglos El operador delete
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 * pArray = new char[20]; // genera un arreglo de 20 caracteres delete [] pArray;
125
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 sSuma(0); int* pnData = new int[20]; // genera un arreglo de 20 enteros for (int i=0;i<20;i++) *(pnData++) = i; // asigna valor a cada element for (int i=0;i<20;i++) nSuma += *(pnData++); // ERROR ! delete [] pnData; // HORROR !
126
PROGRAMACION Las funciones
127
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
128
PROGRAMACION La declaración de una función Sintaxis:
[<tipo_valor_retorno>[modificadores] <identificador>(<lista_parámetros>) { [sentencias] } int MiClase::suma(int n1,int n2) { int nSuma = n1 + n2; return nSuma; }
129
PROGRAMACION La declaración de una función El paso de argumentos
Los parámetros pueden pasarse de 3 maneras: Valor (no modificables y lento) Apuntador o dirección (acceso total, sintaxis complicada) Referencia (igual que por apuntador pero con sintaxis simplificada)
130
PROGRAMACION La declaración de una función El paso de argumentos
Los arreglos deben de pasarse por su dirección: .h void FuncionChar(char * pChar); .cpp char * pData = new char[1024]; FuncionChar(pData);
131
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);
132
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: CBaseClas::FuncionVirtual();
133
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)
134
PROGRAMACION El C++ DE MFC
135
PROGRAMACION El C++ de MFC
typedef unsigned long DWORD; typedef int BOOL; typedef unsigned BYTE; typedef unsigned short WORD; typedef float FLOAT; typedef FLOAT *PFLOAT; typedef BOOL near *PBOOL; typedef BOOL far *LPBOOL; typedef BYTE near *PBYTE; typedef BYTE far *LPBYTE; typedef int near *PINT; typedef int far *LPINT; typedef WORD near *PWORD; typedef WORD far *LPWORD; typedef long far *LPLONG; typedef DWORD near *PDWORD; typedef DWORD far *LPDWORD; typedef void far *LPVOID; typedef CONST void far *LPCVOID; typedef int INT; typedef unsigned int UINT; typedef unsigned int *PUINT; MFC redefine la mayoría de los símbolos utilizados por el lenguaje C estándar.
136
PROGRAMACION El C++ de MFC ASSERT_VALID
La función ASSERT_VALID prueba la validez de un objeto Sintaxis: ASSERT_VALID( pObject ); 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.
137
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.
138
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.
139
PROGRAMACION El C++ de MFC Las Excepciones. TRY & CATCH y END_CATCH
int * px; int y = ; 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
140
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.
141
PROGRAMACION LAS CLASES DE DATOS MFC
142
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
143
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
144
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
145
PROGRAMACION Las clases de datos MFC CString
CString es una clase de cadenas alfanuméricas Las funciones MFC toman como parámetro un CString
146
PROGRAMACION LAS CLASES DE COLECCIONES
147
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
148
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 CTypedPtrArray
149
PROGRAMACION Las clases de datos MFC La Colección CArray
Matrices CObArray CByteArray CDWordArray CPtrArray CStringArray CWordArray CUIntArray Las clases predefinidas (sin plantilla)
150
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 CTypedPtrList
151
PROGRAMACION Las clases de datos MFC La Colección CList
Las clases predefinidas (sin plantilla) Matrices CObList CPtrList CStringList
152
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.)
153
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 CTypedPtrMap
154
PROGRAMACION Las clases de datos MFC La Colección CMap
Matrices CMapPtrToWord CMapPtrToPtr CMapStringToOb CMapStringToPtr CMapStringToString CMapWordToOb CMapWordToPtr La Colección CMap Las clases predefinidas (sin plantilla)
155
PROGRAMACION Class Name Description CMapWordToPtr
Stores void pointers keyed by WORDs CMapPtrToWord Stores WORDs keyed by void pointers CMapPtrToPtr Stores void pointers keyed by other void pointers CMapWordToOb Stores CObject pointers keyed by WORDs CMapStringToOb Stores CObject pointers keyed by strings CMapStringToPtr Stores void pointers keyed by strings CMapStringToString Stores strings keyed by other strings
156
PROGRAMACION Las clases de datos MFC
Características de las formas de colección Forma ¿Ordenada? ¿Indizada? Insertar un elemento Buscar un elemento especificado ¿Duplicar elementos? CArray Matriz Sí Por entero Lento CList Lista No Rápido CMap Mapa Por clave No (claves) Sí (valores)
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.