0% encontró este documento útil (0 votos)
134 vistas159 páginas

Programacion C++

Este documento presenta una breve introducción a la programación en C y C++. Explica que C fue desarrollado originalmente para sistemas operativos como Unix, mientras que C++ fue creado como una extensión de C para permitir la programación orientada a objetos. También describe conceptos básicos como variables, tipos de datos, estructuras y comentarios.

Cargado por

angelblack
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPSX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
134 vistas159 páginas

Programacion C++

Este documento presenta una breve introducción a la programación en C y C++. Explica que C fue desarrollado originalmente para sistemas operativos como Unix, mientras que C++ fue creado como una extensión de C para permitir la programación orientada a objetos. También describe conceptos básicos como variables, tipos de datos, estructuras y comentarios.

Cargado por

angelblack
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPSX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 159

BREVE INTRODUCCION A LA

PROGRAMACION

© Dr. José Antonio Garrido Natarén 2016

1/159
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/159
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/159
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/159
PROGRAMACION

El programa C++ mas pequeño

int main()
{
return 0;
}

5/159
PROGRAMACION

LAS VARIABLES

6/159
PROGRAMACION

Tamaño de tipos básicos

7/159
PROGRAMACION
Tipos fundamentales
Comentario
Tamaño

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 long 8 bytes Representa valores enteros muy grandes.

8/159
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/159
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/159
PROGRAMACION

La notación húngara (MS)


La notación húngara es un sistema usado normalmente para crear los
nombres de variables. Su inventor, 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/159
PROGRAMACION
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)

12/159
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/159
PROGRAMACION

Las declaraciones
• Para que un nombre pueda ser utilizado debe de ser declarado
antes.
• El tipo del nombre debe de ser precisado para informar al
compilador del tipo.

*.h
int nValue,nAge;
Char sName;

14/159
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/159
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/159
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/159
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/159
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 = 09782345 // numero de control
OtroAlumno = MiAlumno;

19/159
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 = 09782345 // numero de control

20/159
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/159
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/159
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/159
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/159
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/159
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/159
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/159
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/159
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/159
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:
cInicial = ´a´;
nEdad = 33;
nYear = 2016;
fPi = 3.14159;
30/159
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 antes de ser utilizada.

*.h
union unionValores
{
int ival;
float fval;
str sval;
} VALORES, * LPVALORES;

*.cpp
VALORES MiValor ;
MiValor.iVal = 12;
31/159
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/159
PROGRAMACION
Las variables (III)
Se pueden inicializar una variable con su constructor natural.

*.cpp

int nVal(12),fVal(3.1415);
char * pnName(NULL);

33/159
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/159
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/159
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/159
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/159
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/159
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 FlagType;


typedef enum FIGURETYPE {FT_POLYLINE=1,FT_POLYGON};

39/159
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
40/159
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/159
PROGRAMACION

Los apuntadores
Y
las referencias
42/159
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/159
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/159
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/159
PROGRAMACION
Los apuntadores

Apuntadores constantes

const int *p = &a; //objeto constante y puntero variable

46/159
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/159
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/159
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/159
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/159
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 = 09782345;// numero de control

51/159
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/159
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/159
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/159
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

55/159
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

56/159
PROGRAMACION

Los arreglos
de datos

57/159
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/159
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/159
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/159
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/159
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/159
PROGRAMACION

Las sentencias

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

64/159
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/159
PROGRAMACION
La Instrucción de asignación “=“

La instrucción de
asignación “=“ int nVal = 45;
asigna un valor a
una variable

66/159
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/159
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 ) if ( nVal == 25 ) nMi = 47;
{ else
// bloque condicionado {
} // bloque condicionado
else }
{
// bloque condicionado
} 68/159
PROGRAMACION
La Instrucción de condición “if –else if”
If ( nVal == 25 )
La instrucción de {
// bloque condicionado
condición “if , else }
if“ condiciona la else if (nVal == 47)
{
ejecución de N // bloque condicionado
}
bloques de else if (nControl == 52)
programa {
// bloque condicionado
}

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

70/159
PROGRAMACION
La Instrucción de iteración ”for”

La instrucción de
iteración “for“ for ( int nVal =0; nVal<10; nVal++ )
{
condiciona la // bloque condicionado
repetición de un }

bloque de programa

71/159
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;

1) Inicialización de entrada
2) Condición de salida
3) Calculo al final del bloque

72/159
PROGRAMACION
La Instrucción de iteración “while”

La instrucción de int nVal = 0;


while( nVal<10 )
iteración “while“ {
condiciona la // bloque condicionado
nVal++;
repetición de un }
bloque de programa

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

entre otros
74/159
PROGRAMACION
La Instrucción de ruptura “break”
La instrucción de
ruptura de int nVal = 45;
switch( nVal )
ejecución “break“ {
case 0:
interrumpe la … // codigo ejecutado si nVal vale 0
ejecución de un break; // detiene la ejecución
}
bloque de
programa for,
while y switch
75/159
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/159
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);
int funcion (int parametro1);
77/159
PROGRAMACION
Las Funciones (II)
Ejemplo de función:

int Suma(int nParametro1, int nParametro2)


{
int nRet = nParametro1 + nParametro2;
return nRet;
}

78/159
PROGRAMACION

Las clases

79/159
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/159
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/159
PROGRAMACION
Las Clases (III)

Una clase tiene miembros y atributos :

• Públicos
• Protegidos
• Privados

82/159
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/159
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);
int funcion (int parametro1);
84/159
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/159
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/159
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/159
PROGRAMACION
Las Clases (VIII)
• 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/159
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/159
PROGRAMACION

90/159
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/159
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/159
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/159
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/159
PROGRAMACION
Las Clases (VIII)
Las funciones virtuales

95/159
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/159
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/159
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/159
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/159
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/159
PROGRAMACION

Los operadores

101/159
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/159
PROGRAMACION
Los Operadores

Existen 6 tipos de operadores según su función:

1. Aritméticos
2. Relacionales
3. De asignación
4. Lógicos
5. De dirección
6. De manejo de Bits

103/159
PROGRAMACION
Los Operadores

Existen 6 tipos de operadores según su función:


1. Aritméticos
2. Relacionales
3. De asignación
4. Lógicos
5. De dirección
6. De manejo de Bits

104/159
PROGRAMACION
Los Operadores
Los operadores de asignación binarios

105/159
PROGRAMACION
Los Operadores
Los operadores aritméticos

106/159
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

107/159
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

108/159
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

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

110/159
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).

111/159
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.

112/159
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 “&”

113/159
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.

114/159
PROGRAMACION
La conversión de tipos (casting)

char a(´b´);
flost fSize;
int n = (int)a;
int nSize = (int)fSize;
float fT = (float)n;

115/159
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
116/159
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;
};
117/159
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;
}
118/159
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);

119/159
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 ()

120/159
PROGRAMACION
Funciones de conversión
El operador de asignación
class Money
{
public:
operator double() { return _amount; }
private:
double _amount;
};

int main()
{
Money Account;
double CashOnHand = Account;
}

121/159
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;
}
122/159
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];

123/159
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;

124/159
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

125/159
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;

126/159
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 !

127/159
PROGRAMACION

Las funciones

128/159
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
129/159
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;
}

130/159
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)

131/159
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);

132/159
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);

133/159
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();

134/159
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)

135/159
PROGRAMACION

El C++ DE MFC

136/159
PROGRAMACION
El C++ de MFC typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned BYTE;
MFC redefine la mayoría de los typedef unsigned short WORD;
símbolos utilizados por el typedef float FLOAT;
typedef FLOAT *PFLOAT;
lenguaje C estándar. 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;

137/159
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.

138/159
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.

139/159
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.

140/159
PROGRAMACION
El C++ de MFC
Las Excepciones. TRY & CATCH y END_CATCH
int * px;
int y = 100000000;

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
141/159
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.

142/159
PROGRAMACION

LAS CLASES
DE
DATOS MFC
143/159
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

144/159
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

145/159
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

146/159
PROGRAMACION
Las clases de datos MFC
CString

• CString es una clase de cadenas alfanuméricas


• Las funciones MFC toman como parámetro un CString

147/159
PROGRAMACION

LAS CLASES
DE
COLECCIONES
148/159
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
149/159
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 CArray
cualquier tipo
Colecciones de apuntadores a CTypedPtrArray
objetos de cualquier tipo
150/159
PROGRAMACION
Las clases de datos MFC
Matrices
La Colección CArray
CObArray
Las clases predefinidas (sin plantilla)
CByteArray

CDWordArray

CPtrArray

CStringArray

CWordArray

CUIntArray

151/159
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 CList
cualquier tipo
Colecciones de apuntadores a CTypedPtrList
objetos de cualquier tipo
152/159
PROGRAMACION
Las clases de datos MFC
La Colección CList
Las clases predefinidas (sin plantilla)

Matrices

CObList

CPtrList

CStringList

153/159
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.)
154/159
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 CMap
cualquier tipo
Colecciones de apuntadores a CTypedPtrMap
objetos de cualquier tipo

155/159
PROGRAMACION
Las clases de datos MFC Matrices
La Colección CMap CMapPtrToWord
Las clases predefinidas (sin plantilla) CMapPtrToPtr

CMapStringToOb

CMapStringToPtr

CMapStringToString

CMapWordToOb

CMapWordToPtr

156/159
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

157/159
PROGRAMACION
Las clases de datos MFC
Características de las formas de colección

Insertar un Buscar un ¿Duplicar


Forma ¿Ordenada? ¿Indizada? elemento elemento elementos?
especificado

CArray Matriz Sí Por entero Lento Lento Sí

CList Lista Sí No Rápido Lento Sí

CMap Mapa No Por clave Rápido Rápido No (claves)


Sí (valores)

158/159
159/159

También podría gustarte