Este documento resume los principales temas sobre clases en C++. Explica los diferentes tipos de constructores, funciones miembro como set y get, objetos constantes, inicializadores de miembros, composición, funciones amigas, el apuntador this, operadores new y delete, y miembros estáticos de clases. También menciona clases contenedoras, iteradores e interfaces de clases.
Unidad 1 Modelo de Internacionalizacion de la empresas.pdf
Clases
1. CLASES II
ING. CAMILO TÁUTIVA MANCERA
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
2. Introducció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 sobrecargar
Mediante la interfaz, un usuario u otro
objeto se cominican con un objeto
Funciones set y get
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
3. Temas
Tipos de funciones miembro
Tipos de constructores
Funciones set y get
Objetos y funciones miembro const
Inicializadores de miembros
Composición
Funciones y clases friend (amigas)
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
4. Tipos de funciones miembros
Constructores y destructores: se les llama
automaticamente cuando un objeto se crea o se
destruye
set y get: permiten a los usuarios establecer
(escribir) y leer (obtener) los valores de los datos
miembro
Operadores: permiten definir operadores
estandar para los objetos de las clases
Iteradores: procesan colecciones de objetos
tales como arrays y listas
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
5. Tipos de constructores
Por defecto: constructor que no tiene
argumentos
Alternativo (predeterminado): constructor
con parámetros
Sobrecargado: proporcionan medios
alternativos para inicializar objetos nuevos de
una clase
De 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
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
6. Constructor por defecto
// el constructor no requiere parametros
Punto::Punto()
{
x=0;
y=0;
} // fin del constructor Punto
Constructor alternativo
// el constructor requiere dos parametros enteros y utiliza funciones miembro para
// inicializar los datos miembro
Punto::Punto(int valx, int valy)
{
fijarx(valx);
fijary(valy);
} // fin del constructor Punto
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
7. Funciones set y get
set (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
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
8. Función set
// 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 cero
void 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
Función get
// imprime Tiempo en formato estándar
void 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
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
9. Objetos y funciones miembro
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
Tiempo despierta( 6, 45, 0 ); // objeto no constante
const Tiempo mediodia( 12, 0, 0 ); // objeto constante
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
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
10. Función miembro const
// imprime Tiempo en formato universal Una función se
void Tiempo::imprimeUniversal() const
{ especifica como
cout << setfill( '0' ) << setw( 2 ) << hora << ":" const tanto en su
<< setw( 2 ) << minuto << ":"
<< setw( 2 ) << segundo; prototipo como
en su definición
} // fin de la función imprimeUniversal
La declaración const no esta permitida
para constructores y destructores
1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
11. Inicializadores 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ón
Ciertos tipos de datos (constantes y referencias)
no pueden ser valores asignados, para esto se
utilizan los Inicializadores de miembros
1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
12. Ejemplo inicializadores de miembros
class Incremento {
public:
Incremento( int c = 0, int i = 1 ); // constructor predeterminado
void sumaIncremento()
{
cuenta += incremento;
} // fin de la función sumaIncremento
void 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 constante
incremento( i ) // se requiere inicializador para un miembro constante
{
// cuerpo vacío
} // fin del constructor Incremento
1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
13. Composición
Una 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álidos
cout << endl;
return 0;
} // fin de main
1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
14. Funciones 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
1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
15. Ejemplo funciones amigas
// Definición de la clase Cuenta
class Cuenta {
friend void estableceX( Cuenta &, int ); // declaración de amistad
public:
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
La amistad se otorga, no se toma
La amistad no es simétrica ni transitiva
1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
16. Apuntador this
Cada 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 *this
void Prueba::imprime() const
{
// uso implícito del apuntador this para acceder al miembro x
cout << " x = " << x;
// uso explícito del apuntador this para acceder al miembro x
cout << "n this->x = " << this->x;
// uso explícito del apuntador this desreferenciado y
// el operador punto para acceder al miembro x
cout << "n(*this).x = " << ( *this ).x << endl;
} // fin de la función imprime
1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
17. Operadores 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>
1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
18. Miembros de clase static
Una 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 clase
Los datos miembro estáticos tienen alcance de
clase y se pueden declarar como public, private o
protected
Los miembros estáticos de una clase existen
incluso cuando no existen objetos de la clase
Acceso: Nombreclase::Miembroestatico
1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
19. Ejemplo dato private y funcion public static
// Definición de la clase Empleado
class Empleado {
public:
Empleado() // constructor
// Función miembro estática
static int obtienecuenta();
private:
char *nombre;
char *apellido
// dato miembro estático
static int cuenta;
}; // fin de la clase Empleado
Nombreclase::Miembroestatico
Public: A través de cualquier objeto de dicha clase
Acceso A través de una función miembro
Private y public static
protected
Nombreclase::Nombrefuncion
1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
20. Clases contenedoras e
iteradoras
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)
Clases proxi
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
2
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II
21. Bibliografia
Deitel H., Deitel P., “Como programar en
C++”, cuarta edición. Pearson educación.
Capítulo 7
Joyanes A. Luis, “Prograamción en C++,
algoritmos, estructuras de datos y objetos”.
Parte I, Capítulo 8; parte II, Capítulo 13
2
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II