Upload
lili
View
998
Download
0
Embed Size (px)
Citation preview
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II1
CLASES IICLASES II
ING. CAMILO TÁUTIVA MANCERA
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II2
IntroducciIntroduccióón n Los constructores se ejecutan automaticamente cuando se crea un objeto de una clase e inicializan los datos miembro Los destructores no entregan ningún valor ni reciben ningún parámetro, tampoco se pueden sobrecargarMediante la interfaz, un usuario u otro objeto se cominican con un objeto Funciones set y get
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II3
TemasTemas
Tipos de funciones miembroTipos de constructoresFunciones set y getObjetos y funciones miembro constInicializadores de miembrosComposiciónFunciones y clases friend (amigas)
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II4
Tipos de funciones miembrosTipos de funciones miembrosConstructores y destructores: se les llama automaticamente cuando un objeto se crea o se destruyeset y get: permiten a los usuarios establecer (escribir) y leer (obtener) los valores de los datos miembroOperadores: permiten definir operadores estandar para los objetos de las clasesIteradores: procesan colecciones de objetos tales como arrays y listas
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II5
Tipos de constructoresTipos de constructores
Por defecto: constructor que no tiene argumentosAlternativo (predeterminado): constructor con parámetrosSobrecargado: proporcionan medios alternativos para inicializar objetos nuevos de una claseDe copia: se crea automaticamente por el compilador cuando un objeto se pasa por valor; se llama también cuando un objeto se declara e inicializa con otro objeto del mismo tipo
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II6
Constructor por defectoConstructor por defecto
Constructor alternativoConstructor alternativo
// el constructor no requiere parametros Punto::Punto() {
x=0;y=0;
} // fin del constructor Punto
// el constructor requiere dos parametros enteros y utiliza funciones miembro para // inicializar los datos miembroPunto::Punto(int valx, int valy) {
fijarx(valx);fijary(valy);
} // fin del constructor Punto
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II7
Funciones set y getFunciones set y getset (establecer): permite al usuario establecer (escribir) los valores de los datos miembros privados
get (obtener): permite al usuario leer los valores de los datos miembros privados
Tienen la ventaja de que se puede controlar el formato en el cual se
muestra la información y examinar cualquier intento de modificar los datos
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II8
// establece un nuevo valor para Tiempo de acuerdo con la hora universal, // realiza la validación de los valores de datos y establece los valores no válidos en cerovoid Tiempo::estableceHora( int h, int m, int s ){
hora = ( h >= 0 && h < 24 ) ? h : 0;minuto = ( m >= 0 && m < 60 ) ? m : 0;segundo = ( s >= 0 && s < 60 ) ? s : 0;
} // fin de la función estableceHora
// imprime Tiempo en formato estándarvoid Tiempo::imprimeEstandar(){
cout << ( ( hora == 0 || hora == 12 ) ? 12 : hora % 12 )<< ":" << setfill( '0' ) << setw( 2 ) << minuto<< ":" << setw( 2 ) << segundo << ( hora < 12 ? " AM" : " PM" );
} // fin de la función imprimeEstandar
FunciFuncióón setn set
FunciFuncióón getn get
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II9
Objetos y funciones miembro Objetos y funciones miembro const const Algunos objetos necesitan ser modificados y otros no; la palabra const especifica que un objeto no se puede modificar y que cualquier intento de hacerlo provocara un error
El compilador deshabilita las llamadas a funciones miembro para objetos const, a menos que las funciones miembro por si mismas se declaren como const. Además el compilador no permite a las funciones miembro declaradas como const modificar al objeto
Tiempo despierta( 6, 45, 0 ); // objeto no constante
const Tiempo mediodia( 12, 0, 0 ); // objeto constante
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II10
FunciFuncióón miembro constn miembro const
// imprime Tiempo en formato universalvoid Tiempo::imprimeUniversal() const{
cout << setfill( '0' ) << setw( 2 ) << hora << ":"<< setw( 2 ) << minuto << ":"<< setw( 2 ) << segundo;
} // fin de la función imprimeUniversal
La declaración const no esta permitida para constructores y destructores
Una función se especifica como const tanto en su prototipo como en su definición
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II11
Inicializadores de miembrosInicializadores de miembros
No está permitido inicializar un dato miembro de una clase cuando ésta se define Se busca inicializar los datos miembro cada vez que se crea una instancia específica de la clase (objeto) El sitio lógico para inicializar los datos miembro está dentro del constructor de la clase, que utiliza expresiones de asignaciónCiertos tipos de datos (constantes y referencias)
no pueden ser valores asignados, para esto se utilizan los Inicializadores de miembros
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II12
class Incremento {public:
Incremento( int c = 0, int i = 1 ); // constructor predeterminadovoid sumaIncremento() {
cuenta += incremento; } // fin de la función sumaIncrementovoid imprime() const; // imprime cuenta e incremento
private:int cuenta;const int incremento; // dato miembro constante
}; // fin de la clase Incremento
// constructor Incremento::Incremento( int c, int i )
: cuenta( c ), // inicializador para un miembro no constanteincremento( i ) // se requiere inicializador para un miembro constante
{ // cuerpo vacío
} // fin del constructor Incremento
Ejemplo inicializadores de miembrosEjemplo inicializadores de miembros
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II13
ComposiciComposicióónnUna clase compuesta es aquella que contiene datos miembro que son así mismo objetos de otras clases
int main(){
Fecha nacimiento( 7, 24, 1949 );Fecha contratacion( 3, 12, 1988 );Empleado gerente( "Juan", "Perez", nacimiento, contratacion );cout << '\n';gerente.imprime();cout << "\nVerifica el constructor Fecha con valores no validos:\n";Fecha ultimoDiaFest( 14, 35, 1994 ); // mes y día no válidoscout << endl;return 0;
} // fin de main
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II14
Funciones y clases amigasFunciones y clases amigas
Son funciones que se definen fuera del alcance de la clase y aun así tienen el derecho de acceder a los miembros no publicos de la clase Las funciones independientes o las clases completas se pueden declarar para que sean amigas de otra clase
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II15
// Definición de la clase Cuenta class Cuenta {
friend void estableceX( Cuenta &, int ); // declaración de amistadpublic:
Cuenta() // constructor: x( 0 ) // inicializa x en 0
{ // cuerpo vacío
} // fin del constructor Cuenta// despliega x void imprime() const {
cout << x << endl; } // fin de lafunción imprime
private:int x; // dato miembro
}; // fin de la clase Cuenta
Ejemplo funciones amigasEjemplo funciones amigas
La amistad se otorga, no se tomaLa amistad no es simétrica ni transitiva
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II16
Apuntador thisApuntador thisCada objeto tiene acceso a su propia dirección a través de un apuntador llamado this
// imprime x mediante el uso implícito y explícito de apuntadores this;// se requieren paréntesis alrededor de *thisvoid Prueba::imprime() const {
// uso implícito del apuntador this para acceder al miembro xcout << " x = " << x;// uso explícito del apuntador this para acceder al miembro xcout << "\n this->x = " << this->x;// uso explícito del apuntador this desreferenciado y // el operador punto para acceder al miembro xcout << "\n(*this).x = " << ( *this ).x << endl;
} // fin de la función imprime
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II17
Operadores new y deleteOperadores new y delete
Administración de memoria dinámica: controlar la asignación y liberación de memoria en un programa, para cualquier tipo de dato (o clase)Se lleva a cabo con los operadores new y delete
Tiempo *ptrTiempo;
ptrTiempo= new Tiempo;
delete ptrTiempo;
Se utiliza el encabezado <new>
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II18
Miembros de clase staticMiembros de clase staticUna variable de clase static (estática) representa información “propia de la clase”, es decir una propiedad de la clase, no de un objeto especifico de la claseLos datos miembro estáticos tienen alcance de clase y se pueden declarar como public, private o protectedLos miembros estáticos de una clase existen incluso cuando no existen objetos de la claseAcceso: Nombreclase::Miembroestatico
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II19
Ejemplo dato private y funcion public static Ejemplo dato private y funcion public static
// Definición de la clase Empleadoclass Empleado {public:
Empleado() // constructor// Función miembro estáticastatic int obtienecuenta();
private:char *nombre;char *apellido// dato miembro estáticostatic int cuenta;
}; // fin de la clase Empleado
Acceso
Public:
Private y protected
Nombreclase::MiembroestaticoA través de cualquier objeto de dicha clase
A través de una función miembro public static Nombreclase::Nombrefuncion
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II20
Clases contenedoras e Clases contenedoras e iteradorasiteradoras
Clases proxiClases proxi
Las clases contenedoras son clases diseñadas para contener colecciones de objetos (arreglos, pilas, colas, arboles, etc.)
Un iterador es un objeto que devuelve el siguiente elemento de una colección (o realiza alguna acción sobre el siguiente elemento de una colección)
La clase proxi es una clase que solo conoce la interfaz pública de su clase y permite a los usuarios utilizar los servicios de la clase sin dar acceso a los detalles de implementación
21/02/2006Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II21
Bibliografia Bibliografia
Deitel H., Deitel P., “Como programar en C++”, cuarta edición. Pearson educación. Capítulo 7Joyanes A. Luis, “Prograamción en C++, algoritmos, estructuras de datos y objetos”. Parte I, Capítulo 8; parte II, Capítulo 13