Académique Documents
Professionnel Documents
Culture Documents
Mayo, 2005
Clases
Una clase es la descripcin de un tipo de objeto. La descripcin abarca la definicin de los distintos atributos
y mtodos inherentes al objeto.
Sintaxis:
class tipo_objeto
{
public:
tipo_dato
:
tipo_dato
private:
tipo_dato
:
tipo_dato
};
metodo1 (parmetros);
metodoN (parmetros);
atributo1;
atributoN;
Constructores.
Cuando se crean objetos, una de las operaciones ms comunes que se realizan sus programas es inicializar los
datos miembros del objeto. Para simplificar el proceso de inicializacin de los datos miembros de la clase, el C++
proporciona una funcin constructora que se ejecuta por si sola cada vez que se crea un objeto. A continuacin se
presentan las siguientes caractersticas de los constructores:
Las funciones constructoras son mtodos de la clase que facilitan a los programas la inicializacin de
los datos miembros de la clase.
Las funciones constructoras tienen el mismo nombre que la clase.
Las funciones constructoras no retornan valores.
Cada vez que el programa crea un objeto de la clase, C++ llama a la funcin constructora de la clase,
si existe.
Pueden existir varias funciones constructoras, pero con diferentes parmetros, esto se conoce como
sobrecarga.
Destructores.
Una funcin destructora automticamente se ejecuta cada vez que se finalice la ejecucin de un programa.
Muchos de los objetos pueden asignar memoria para almacenar informacin, cuando se descarta a un objeto, el C+
+ llama a una funcin destructora especial que puede liberar dicha memoria, limpiando la basura dejada por la
desaparicin del objeto. A continuacin se presentan las siguientes caractersticas de los constructores:
Las funciones destructoras tienen el mismo nombre que la clase, con la excepcin de que debe
anteponer a su nombre el carcter tilde (~).
Las funciones destructoras no retornan valores.
Funciones Amigas
Una funcin amiga de una clase se define por fuera del alcance directo de los miembros privados de dicha
clase, pero aun as tiene el derecho de acceso a los miembros private de la clase. Se puede declarar una funcin o
toda una clase como friend de otra clase. Para declarar una funcin como friend en una clase, en la definicin de
clase procede el prototipo de la funcin con la palabra reservada friend.
Sintaxis:
class tipo_objeto
{
friend tipo_dato funcionamiga (tipo_objeto *, parmetros);
public:
:
private:
:
};
tipo_dato funcionamiga (tipo_objeto *, parmetros)
{
instrucciones;
}
Ejercicios Resueltos
//Programa 1: Procesar informacin de un empleado por medio de una clase.
#include <iostream.h>
#include <conio.h>
class empleado
{
public:
void leer_empleado(void);
void mostrar_empleado(void);
char nombre[15];
long numero_empleado;
float salario;
};
void empleado::leer_empleado(void)
{
cout<< "Nombre:";
cin >> nombre;
cout<< "Nmero:";
cin >> numero_empleado;
cout<< "Salario: Bs.";
cin >> salario;
}
void empleado::mostrar_empleado(void)
{
cout << "Nombre: " << nombre << endl;
cout << "Nmero: " << numero_empleado << endl;
cout << "Salario: Bs." << salario << endl;
}
void main()
{
empleado trabajador;
clrscr();
trabajador.leer_empleado();
cout<<"\nResultado despus de la lectura...\n";
trabajador.mostrar_empleado();
cout<<"\nPresione una Tecla para Continuar";
getch();
}
};
private:
char nombre[15];
long numero_empleado;
float salario;
void empleado::leer_empleado(void)
{
cout<< "Nombre:";
cin >> nombre;
cout<< "Nmero:";
cin >> numero_empleado;
cout<< "Salario: Bs.";
cin >> salario;
}
void empleado::mostrar_empleado(void)
{
cout<<"\t"<<nombre<<"\t"<<numero_empleado<<"\t"<<salario<< endl;
}
void main()
{
empleado trabajador[5];
clrscr();
for (int i=0; i<5; i++)
{
cout<<"Empleado "<<i+1<<endl;
trabajador[i].leer_empleado();
}
clrscr();
cout<<"\n\tListado de Empleados\n";
cout<<"\tNombre\tNumero\tSalario Bs.\n\n";
for (int i=0; i<5; i++)
trabajador[i].mostrar_empleado();
cout<<"\nPresione una Tecla para Continuar";
getch();
}
void main()
{
empleado trabajador;
if (trabajador.asignar_valores("Ana Prez", 101, 850000.0)== 0)
{
cout << "Valores asignados al empleado." << endl;
trabajador.mostrar_empleado();
}
else
{
cout << "Especifico un salario no vlido." << endl;
cout << "\nAsigne un nuevo salario:";
trabajador.cambiar_salario();
}
cout<<"\nPresione una Tecla para Continuar";
getch();
}
void empleado::asignar_valores(void)
{
cout<< "\nNombre:";
cin >> nombre;
cout<< "Salario: Bs.";
cin >> salario;
}
void empleado::mostrar_empleado(void)
{
cout << "\nEmpleado: " << nombre << endl;
cout << "Salario: Bs." << salario << endl;
}
void main()
{
empleado acceso;
cout<<"Introduzca clave de acceso (5 caracteres):";
acceso.leer_clave();
cout<<"\nPresione una Tecla para Continuar";
getch();
}
cout << "\nEl tiempo en formato estandar despues de activar un tiempo es -> ";
t.imprimir_formato_estandar ();
t.activar_tiempo (99, 99, 99);
cout << "\n\nEl tiempo con datos invalidos:"<< "\nEn formato militar es -> ";
t.imprimir_formato_militar ();
cout << "\nEn formato estandar es -> ";
t.imprimir_formato_estandar ();
getch();
//Programa 11: Implementacin de una clase cadena para crear y manipular objetos tipo cadenas
de caracteres.
#include <iostream.h>
#include <string.h>
#include <conio.h>
class cadena
{
public:
cadena(char *);
// Constructor
void sumar_cadena(char *);
void restar_caracter(char);
void mostrar_cadena(void);
private:
char datos[100];
};
cadena::cadena(char *letras)
{
strcpy(datos, letras);
}
void cadena::sumar_cadena(char *letras)
{
strcat(datos, letras);
}
void cadena::restar_caracter(char letra)
{
char temp[100];
int i, j;
for (i = 0, j = 0; datos[i]; i++)
{
if (datos[i] != letra) temp[j++] = datos[i];
}
temp[j] = NULL;
strcpy(datos, temp);
}
void cadena::mostrar_cadena(void)
{
cout << datos << endl;
}
void main()
{
cadena titulo("Aprenda Programacin Orientada a Objetos en C++");
cadena tema("Entienda la sobrecarga de operadores");
titulo.mostrar_cadena();
titulo.sumar_cadena(" paso a paso!");
titulo.mostrar_cadena();
tema.mostrar_cadena();
tema.restar_caracter('r');
tema.mostrar_cadena();
cout<<"\nPresione una Tecla para Continuar";
getch();
}
//Programa 14: Implementacin de una funcin amiga dentro de una clase perteneciente a otra
clase.
#include <iostream.h>
#include <string.h>
#include <conio.h>
class libro;
class biblioteca
{
public:
void cambiar_catalogo(libro *, char *);
};
class libro
{
public:
libro(char *, char *, char *);
void mostrar_libro(void);
friend void biblioteca::cambiar_catalogo(libro *,char *);
private:
char titulo[25];
char autor[25];
char catalogo[25];
};
void biblioteca::cambiar_catalogo(libro *este_libro, char *catalogo_nuevo)
{
strcpy(este_libro->catalogo, catalogo_nuevo);
}
libro::libro(char *t_titulo, char *t_autor, char *t_catalogo)
{
strcpy(titulo, t_titulo);
strcpy(autor, t_autor);
strcpy(catalogo, t_catalogo);
}
void libro::mostrar_libro(void)
{
cout << "Ttulo: " << titulo << endl;
cout << "Autor: " << autor << endl;
cout << "Catlogo: " << catalogo << "\n\n";
}
void main()
{
libro programacion("Aprenda C++ paso a paso"," Ing. Informatica"," Principiantes");
programacion.mostrar_libro();
biblioteca bibliotecario;
bibliotecario.cambiar_catalogo(&programacion,"Como aprender en C++ funciones amigas");
programacion.mostrar_libro();
cout<<"\nPresione una Tecla para Continuar";
getch();
}
Ejercicios Propuestos
1. El gobierno regional ha realizado una encuesta, donde se han solicitado los datos ms relevantes, sobre la
preferencia de los vehculos disponibles en el mercado, para determinar cuales modelos se escogern para la
puesta en marcha de un plan denominado FonBienes. Los datos registrados, para cada encuestado se refieren
a: Nombre del encuestado, marca del vehculo, modelo, monto disponible para entregar como cuota inicial y
nmero de meses para pagar. El gobierno desea un programa en C++, que posea las siguientes caractersticas:
a) La funcin constructora y destructora de la respectiva clase.
b) Almacenar los datos recopilados en un arreglo de objetos. Utilice una funcin miembro pblica.
c) Generar un listado por pantalla con los nombres de aquellos encuestados que hayan seleccionado
vehculos de la marca Ford a excepcin del modelo Laser y que requieran un plazo mayor a dos
aos para cancelar el vehculo. Utilice una funcin miembro pblica.
d) Determinar si el modelo Corsa de la marca Chevrolet tiene mayor preferencia que el modelo
Fiesta de la marca Ford. Utilice una funcin amiga.
2. La biblioteca de la UNET desea adquirir N cantidad de libros, los cuales se identifican mediante los siguientes
datos: ISBN, Ttulo, Editorial, Ao de Publicacin, Costo y Observacin. La biblioteca desea un programa en
C++, que posea las siguientes caractersticas:
a) Una funcin amiga para cargar los datos de los atributos del objeto.
b) Una funcin miembro pblica para validar el costo del libro (el costo debe se mayor a 4000 Bs.).
c) Una funcin miembro pblica para asignarle al atributo Observacin un valor con base a la siguiente
condicin: Si el costo del libro es mayor a 60000 Bs. o la publicacin del libro es menor al ao 2001,
este libro no lo puede adquirir la universidad; en caso contrario el libro si se lo puede adquirir la
universidad.
d) Una funcin miembro pblica para listar los datos de aquellos libros que la biblioteca no puede adquirir.
e) Una funcin amiga para determinar el costo promedio de los libros de una determinada editorial
suministrada por el usuario.
f) La funcin constructora y destructora de la respectiva clase.
3. Una inmobiliaria posee el registro para cado uno de los tipos de inmuebles que administra (casas, quintas y
apartamentos) y que estn actualmente disponibles con los siguientes campos: Nombre del propietario, tipo de
transaccin (venta o alquiler), costo de la transaccin, caractersticas del inmueble (cantidad de habitaciones,
cantidad de baos, con o sin telefono), para este ltimo atributo hacer uso de un campo tipo estructura. Escriba
un programa en C++ para:
a)
Almacenar los datos de la siguiente cantidad de inmuebles: seis casas, tres quintas y cuatro
apartamentos.
b) Calcular mediante una funcin amiga el costo promedio de las casas en venta.
c) Listar en un archivo de texto el nombre del propietario y el costo de los apartamentos de tres
habitaciones, disponibles para alquilar. Use una funcin miembro pblica.
4. Leer N nmeros por el teclado y almacenarlos en un arreglo de objetos a travs de una funcin definida por el
usuario. Disear un programa en C++ con tres funciones amigas para determinar en cada caso
respectivamente: si el nmero es capicua, cantidad de divisores y el cubo del nmero. Ir visualizando para
cada nmero y en forma de columnas los resultados que retornen las funciones amigas de la clase.
5. Leer N nmeros por el teclado y almacenarlos en un arreglo de objetos a travs de una funcin definida por el
usuario. Disear un programa en C++ con tres funciones amigas para determinar en cada caso
respectivamente: si el nmero es primo, perfecto, par o impar. Ir visualizando para cada nmero y en forma de
columnas los resultados que retornen las funciones amigas de la clase.
6. En un banco de la ciudad existe un gerente, tres subgerentes y seis cajeros, cada uno de estos empleados
mencionados poseen por jerarquia un nombre de usuario y una contrasea iguales para tener acceso al sistema
de transacciones u operaciones de los clientes del banco. Disear un programa en C++ con mens de
operaciones para efectuar lo siguiente:
a)
Use funciones miembros pblicas para introducir y validar el nombre de usuario y contrasea
dependiendo del tipo de empleado seleccionado por el usuario.
b) Si la validacin realizada en el punto anterior es correcta a travs de funciones miembros privadas
cargar, modificar y consultar datos de los clientes desde archivos binarios. Pero existen ciertas
restricciones por cada nivel de jerarquia existente en el banco para el manejo de las transacciones u
operaciones de los clientes, estas son:
Los datos almacenados acerca de los clientes en el archivo son los siguientes: Nro. de cuenta, Nro. de libreta,
fecha de apertura de la cuenta (un campo de tipo estructura: dia, mes y ao) y nombre del cliente.
En otra clase independiente a los clientes manejar los datos de los empleados de los cuales se tienen los
siguientes datos privados y funciones miembros pblicas: Nombre del empleado, nombre de usuario, contrasea,
tipo de empleado, sueldo y prima; cargar y listar los datos de los empleados. Aplicar sobrecarga de funciones
constructoras