República Bolivariana de Venezuela
Universidad Nacional Experimental del Táchira
Departamento de Ingeniería Informática
Tema Perteneciente a la Unidad Nº
II: Programación Orientada a Objetos en C++.
Autor: Lcdo. José Froilán Guerrero Pulido
Clases
Una
clase es la descripción de un tipo de objeto. La descripción abarca la
definición de los distintos atributos y métodos inherentes al objeto.
Sintaxis:
class tipo_objeto
{
public:
tipo_dato
metodo1 (parámetros);
:
tipo_dato
metodoN (parámetros);
private:
tipo_dato
atributo1;
:
tipo_dato
atributoN;
};
tipo_dato tipo_objeto::metodo1 (parámetros)
{
instrucciones;
}
:
tipo_dato tipo_objeto::metodoN (parámetros)
{
instrucciones;
}
En algunos casos se puede
pensar en la declaración de atributos en la parte publica y asi mismo el
declarar métodos en la parte privada.
La parte pública de la
clase implica que los elementos definidos en este bloque solo se pueden manipular
en cualquier lugar del programa a través de un identificador de acceso
(variable o arreglo). La parte privada de la clase implica que los elementos
definidos en este bloque solo se pueden manipular solo por métodos definidos en
la parte pública.
Constructores.
Cuando se crean objetos, una de las operaciones más
comunes que se realizan sus programas es inicializar los datos miembros del
objeto. Para simplificar el proceso de inicialización de los datos miembros de la
clase, el C++ proporciona una función constructora que se ejecuta por si sola
cada vez que se crea un objeto. A continuación se presentan las siguientes
características de los constructores:
·
Las funciones constructoras son
métodos de la clase que facilitan a los programas la inicialización 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 función constructora de la clase, si existe.
·
Pueden existir varias funciones
constructoras, pero con diferentes parámetros, esto se conoce como sobrecarga.
Destructores.
Una función destructora automáticamente
se ejecuta cada vez que se finalice la ejecución de un programa. Muchos de los
objetos pueden asignar memoria para almacenar información, cuando se descarta a
un objeto, el C++ llama a una función destructora especial que puede liberar
dicha memoria, limpiando la basura dejada por la desaparición del objeto. A
continuación se presentan las siguientes características de los constructores:
·
Las funciones destructoras tienen
el mismo nombre que la clase, con la excepción de que debe anteponer a su
nombre el carácter tilde (~).
·
Las funciones destructoras no
retornan valores.
Funciones Amigas
Una función amiga de una clase se
define por fuera del alcance directo de los miembros privados de dicha clase,
pero aún así tiene el derecho de acceso a los miembros private de la clase. Se
puede declarar una función o toda una clase como friend de otra clase.
Para declarar una función como friend en una clase, en la
definición de clase procede el prototipo de la función con la palabra
reservada friend.
Sintaxis:
class tipo_objeto
{
friend tipo_dato funcionamiga (tipo_objeto *, parámetros);
public:
:
private:
:
};
tipo_dato funcionamiga (tipo_objeto *, parámetros)
{
instrucciones;
}
Ejercicios Resueltos
//Programa 1: Procesar información 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<< "Número:";
cin >> numero_empleado;
cout<<
"Salario: Bs.";
cin >> salario;
}
void
empleado::mostrar_empleado(void)
{
cout << "Nombre: "
<< nombre << endl;
cout << "Número: "
<< numero_empleado << endl;
cout <<
"Salario: Bs." << salario << endl;
}
void main()
{
empleado trabajador;
clrscr();
trabajador.leer_empleado();
cout<<"\nResultado después de
la lectura...\n";
trabajador.mostrar_empleado();
cout<<"\nPresione una Tecla
para Continuar";
getch();
}
//Programa 2: Procesar información de cinco
empleados por medio de una clase.
#include <iostream.h>
#include <conio.h>
class empleado
{
public:
void leer_empleado(void);
void mostrar_empleado(void);
private:
char
nombre[15];
long
numero_empleado;
float salario;
};
void
empleado::leer_empleado(void)
{
cout<< "Nombre:";
cin >> nombre;
cout<< "Número:";
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();
}
//Programa 3: Efectuar la asignación y lectura de
datos fuera de la clase.
#include <iostream.h>
#include <conio.h>
class perros
{
public:
char raza[15];
int peso_promedio;
int altura_promedio;
void mostrar_raza(void);
};
void
perros::mostrar_raza(void)
{
cout << "Raza: " <<
raza << endl;
cout << "Peso promedio: "
<< peso_promedio << endl;
cout << "Altura promedio:
" << altura_promedio << endl;
}
void
main()
{
perros canito, canuto;
strcpy(canito.raza,"Doberman");
canito.peso_promedio = 58;
canito.altura_promedio = 25;
cout<<"Ingrese los Datos
Referentes a Canuto...\n";
cout<<"Raza:";
cin>>canuto.raza;
cout<<"Peso Promedio:";
cin>>canuto.peso_promedio;
cout<<"Altura Promedio:";
cin>>canuto.altura_promedio;
clrscr();
cout<<"\nResultados después de
la lectura...\n\n";
cout<<"Los datos de Canito
son:\n";
canito.mostrar_raza();
cout<<"\nLos datos de Canuto
son:\n";
canuto.mostrar_raza();
cout<<"\nPresione una Tecla
para Continuar";
getch();
}
//Programa 4: Efectuar la lectura y validacion de
los miembros de la parte privada de la clase.
#include <iostream.h>
#include <conio.h>
class empleado
{
public:
int asignar_valores(char *, long, float);
void
mostrar_empleado(void);
void cambiar_salario(void);
private:
char nombre[15];
long numero;
float salario;
};
int
empleado::asignar_valores(char *t_nom, long t_num, float t_sal)
{
strcpy(nombre,t_nom);
numero = t_num;
if (t_sal > 198000.0 && t_sal
< 600000.0)
{
salario
= t_sal;
return(0); // salario incorrecto
}
else
return(-1); // salario
equivocado
}
void
empleado::mostrar_empleado(void)
{
cout << "Empleado: "
<< nombre << endl;
cout << "Número: "
<< numero << endl;
cout <<
"Salario: Bs." << salario << endl;
}
void
empleado::cambiar_salario (void)
{
do
{
cin>>salario;
if (salario < 198000.0 || salario > 600000.0)
cout<<"\nSalario
Incorrecto...\nDar un nuevo salario:";
}
while(salario < 198000.0 ||
salario > 600000.0);
}
void main()
{
empleado trabajador;
if (trabajador.asignar_valores("Ana
Pérez", 101, 850000.0)== 0)
{
cout << "Valores asignados
al empleado." << endl;
trabajador.mostrar_empleado();
}
else
{
cout << "Especifico un
salario no válido." << endl;
cout << "\nAsigne un nuevo
salario:";
trabajador.cambiar_salario();
}
cout<<"\nPresione una Tecla
para Continuar";
getch();
}
//Programa 5: Efectuar la invocación y lectura de
los miembros de la clase, luego
//de efectuar la lectura de una clave de seguridad.
#include <iostream.h>
#include <string.h>
#include <conio.h>
#define ENTER 13
class empleado
{
public:
void leer_clave(void);
void validar_clave(char *);
private:
void asignar_valores(void);
void mostrar_empleado(void);
char clave[6];
char nombre[15];
float salario;
};
void
empleado::leer_clave(void)
{
int j=0;
char t_clave[6];
do
{
t_clave[j]=getch();
if
(t_clave[j]!=ENTER) cout<<"*";
j++;
}
while (t_clave[j-1]!=ENTER);
t_clave[j-1]='\0';
validar_clave(t_clave);
}
void
empleado::validar_clave(char *c)
{
static int i=1;
strcpy(clave,"josef");
if (strcmp(c,clave)!=0)
{
cout<<"\nClave
Incorrecta";
if (i==1)
{
cout<<"\nDar de nuevo
la clave:";
i=2;
leer_clave();
}
else
{
cout<<"\nHasta Luego...Usuario no
Autorizado";
}
}
else
{
cout<<"\nClave
Correcta";
asignar_valores();
clrscr();
mostrar_empleado();
}
}
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();
}
//Programa 6: Implementación de una función
constructora sin parámetros.
#include <iostream.h>
#include
<conio.h>
// Construccion de la clase tiempo
class tiempo
{
public:
tiempo();
void
activar_tiempo (int, int, int );
void
imprimir_formato_militar ();
void
imprimir_formato_estandar ();
private:
int
hora; // 0-23
int
minuto; // 0-59
int
segundo; // 0-59
};
// La funcion tiempo inicializa a 0 los miembros de
datos de la clase
tiempo::tiempo ()
{
hora=minuto=segundo=0;
}
// Activa un nuevo tiempo usando el formato militar.
Chequea los datos
// introducidos, si los datos son invalidos
iniciliza los valores de
// los miembros de datos en cero.
void tiempo::activar_tiempo (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;
}
// Funcion para imprimir el tiempo en formato
militar
void tiempo::imprimir_formato_militar ()
{
cout<< (hora < 10 ? "0" : "") << hora
<< ":"
<< (minuto < 10 ? "0"
: "") << minuto << ":"
<< (segundo < 10 ?
"0" : "") << segundo;
}
// Funcion para imprimir el tiempo en formato
estandar
void tiempo::imprimir_formato_estandar ()
{
cout
<< (hora==0 || hora==12 ? 12 : hora%12) << ":"
<< (minuto < 10 ?
"0" : "") << minuto << ":"
<< (segundo < 10 ?
"0" : "") << segundo
<< (hora < 12 ? " AM" : " PM");
}
void main()
{
clrscr();
tiempo
t; // t es una variable objeto de tipo
tiempo
cout
<< "El tiempo inicial en formato militar es -> ";
t.imprimir_formato_militar ();
cout
<< "\nEl tiempo inicial en formato estandar es -> ";
t.imprimir_formato_estandar ();
t.activar_tiempo (13, 27, 6);
cout
<< "\n\nEl tiempo en formato militar despues de activar un tiempo es
-> ";
t.imprimir_formato_militar ();
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 7: Implementación de una función
constructora sin parámetros.
//Inicialización de un vector numérico a través del
constructor.
#include <iostream.h>
#include <conio.h>
class entero
{
public:
entero()
{
x=2;
};
void mostrar_valor(void);
private:
int x;
};
void entero::mostrar_valor(void)
{
cout<<x;
}
void main(void)
{
entero
vec[10];
clrscr();
for (int i=0; i<10; i++)
{
cout<<"\nEl valor de
vec["<<i<<"]:";
vec[i].mostrar_valor();
}
cout<<"\nPresione una Tecla para Continuar";
getch();
}
//Programa 8: Implementación de una función
constructora con parámetros.
#include <iostream.h>
#include <string.h>
#include <conio.h>
class empleado
{
public:
empleado(char *, int, float);
void
mostrar_empleado(void);
private:
char nombre[15];
int
numero;
float salario;
};
empleado::empleado(char *t_nom, int t_num, float t_sal)
{
strcpy(nombre, t_nom);
numero
= t_num;
salario = (t_sal < 500000.0)? t_sal:
0.0;
}
void
empleado::mostrar_empleado(void)
{
cout << "\nEmpleado: "
<< nombre << endl;
cout << "Número: "
<< numero << endl;
cout <<
"Salario: Bs." << salario << endl;
}
void main()
{
char nom[15];
float sal;
int num;
cout<< "Nombre:";
cin >> nom;
cout<< "Número:";
cin >> num;
cout<< "Salario: Bs.";
cin >> sal;
empleado trabajador(nom, num, sal);
cout<<"\n\nLos datos
almacenados después de ejecutarse la función constructora";
trabajador.mostrar_empleado();
cout<<"\nPresione una Tecla
para Continuar";
getch();
}
//Programa 9: Sobrecarga de funciones
constructoras.
#include <iostream.h>
#include <string.h>
#include <conio.h>
class empleado
{
public:
empleado(char *, long, float);
empleado(char *, long);
void mostrar_empleado(void);
int cambiar_salario(float);
long leer_numero(void);
private:
char nombre[25];
long numero_empleado;
float salario;
};
empleado::empleado(char
*nombre, long numero_empleado,float salario)
{
strcpy(empleado::nombre,
nombre);
empleado::numero_empleado
= numero_empleado;
if
(salario < 50000.0) empleado::salario = salario;
else
empleado::salario = 0.0; // salario
especificado no válido
}
empleado::empleado(char
*nombre, long numero_empleado)
{
strcpy(empleado::nombre,
nombre);
empleado::numero_empleado = numero_empleado;
do
{
cout << "Digite un salario para
" << nombre << " menor a Bs. 500,000.00: ";
cin
>> empleado::salario;
}
while(salario >= 500000.0);
}
void
empleado::mostrar_empleado(void)
{
cout
<< "Empleado: " << nombre << endl;
cout
<< "Número: " << numero_empleado << endl;
cout << "Salario: Bs." << salario << endl;
}
void main()
{
empleado
trabajador("Feliz Guerra", 101, 10101.0);
empleado
gerente("Juana Pérez", 102);
trabajador.mostrar_empleado();
gerente.mostrar_empleado();
cout<<"\nPresione
una Tecla para Continuar";
getch();
}
//Programa 10: Implementación de una función
destructora.
#include <iostream.h>
#include <string.h>
#include <conio.h>
class empleado
{
public:
empleado(char *, int, float);
~empleado(void);
void mostrar_empleado(void);
private:
char nombre[15];
int numero;
float salario;
};
empleado::empleado(char
*t_nom, int t_num, float t_sal)
{
strcpy(nombre, t_nom);
numero
= t_num;
salario = (t_sal < 500000.0)? t_sal:
0.0;
}
empleado::~empleado(void)
{
cout<<"\n\nDestruyendo el
objeto para "<< nombre<< endl;
getch();
}
void
empleado::mostrar_empleado(void)
{
cout << "\nEmpleado: " << nombre <<
endl;
cout << "Número: "
<< numero << endl;
cout <<
"Salario: Bs." << salario << endl;
}
void main()
{
char nom[15];
float sal;
int num;
cout<< "Nombre:";
cin >> nom;
cout<< "Número:";
cin >> num;
cout<< "Salario: Bs.";
cin >> sal;
empleado trabajador(nom, num, sal);
cout<<"\n\nLos datos
almacenados después de ejecutarse la función constructora";
trabajador.mostrar_empleado();
cout<<"\nPresione una Tecla
para Continuar";
getch();
}
//Programa 11: Implementación 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 Programación
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 12: Implementación de una funcion amiga.
#include <iostream.h>
#include <conio.h>
class numero
{
friend void asignar_valor(numero
*,int );
public:
numero(){x=0;}
void imprimir(void);
private:
int x;
};
void
asignar_valor (numero *c,int nx)
{
c->x=nx;
}
void numero::imprimir(void)
{
cout << x << endl;
}
void
main()
{
int n;
numero m;
cout<<"El valor de la variable
x antes de activar la función amiga: ";
m.imprimir();
cout<<"Dar un valor para
x:";
cin>>n;
asignar_valor(&m,n);
cout<<"El valor de la variable
x después de activar la función amiga: ";
m.imprimir();
cout<<"\nPresione una Tecla
para Continuar";
getch();
}
//Programa
13: Manipulación de una función amiga y variables por referencia.
#include
<iostream.h>
#include
<conio.h>
class
entero
{
friend float suma_condicionada(entero *,
int &);
public:
void cargar();
private:
float y;
};
void
entero::cargar()
{
cin>>y;
}
float
suma_condicionada(entero *num, int &c)
{
float x;
if (num->y>=100 &&
num->y<=200)
{
c++;
x=num->y;
}
else x=0;
return x;
}
void
main()
{
entero vec[100];
float pro, acum=0;
char resp;
int i=-1,con=0;
do
{
i++;
cout<<"Dar valor
"<<i+1<<":";
vec[i].cargar();
cout<<"Desea cargar
otro valor (s/n):";
resp=getch();
resp=toupper(resp);
cout<<endl;
}
while (resp=='S'||i>=100);
for (int j=0; j<=i; j++)
{
acum+=(suma_condicionada(&vec[j],con));
}
pro=acum/con;
printf ("El promedio de los
valores condicionados es de:%.2f",pro);
cout<<"\nPresione una
Tecla para Continuar";
getch();
}
//Programa
14: Implementación de una función 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 << "Título: "
<< titulo << endl;
cout << "Autor: "
<< autor << endl;
cout << "Catálogo: "
<< 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 más relevantes, sobre la preferencia de los vehículos disponibles
en el mercado, para determinar cuales modelos se escogerán para la puesta en
marcha de un plan denominado “FonBienes”. Los datos registrados, para cada
encuestado se refieren a: Nombre del encuestado, marca del vehículo, modelo,
monto disponible para entregar como cuota inicial y número de meses para pagar.
El gobierno desea un programa en C++, que posea las siguientes características:
a)
La función constructora y destructora de la respectiva clase.
b)
Almacenar los datos recopilados en un arreglo de objetos.
Utilice una función miembro pública.
c)
Generar un listado por pantalla con los nombres de aquellos
encuestados que hayan seleccionado vehículos de la marca “Ford” a excepción del
modelo “Laser” y que requieran un plazo mayor a dos años para cancelar el
vehículo. Utilice una función miembro pública.
d)
Determinar si el modelo “Corsa” de la marca “Chevrolet” tiene
mayor preferencia que el modelo “Fiesta” de la marca “Ford”. Utilice una
función amiga.
2.
La biblioteca de la UNET desea
adquirir N cantidad de libros, los cuales se identifican mediante los
siguientes datos: ISBN, Título, Editorial, Año de Publicación, Costo y
Observación. La biblioteca desea un programa en C++, que posea las siguientes
características:
a)
Una función amiga para cargar los
datos de los atributos del objeto.
b)
Una función miembro pública para
validar el costo del libro (el costo debe se mayor a 4000 Bs.).
c)
Una función miembro pública para asignarle al atributo “Observación” un valor
con base a la siguiente condición: Si el costo del libro es mayor a 60000 Bs. o
la publicación del libro es menor al año 2001, este libro no lo puede adquirir
la universidad; en caso contrario el libro si se lo puede adquirir la
universidad.
d)
Una función miembro pública para
listar los datos de aquellos libros que la biblioteca no puede adquirir.
e)
Una función amiga para determinar
el costo promedio de los libros de una determinada editorial suministrada por
el usuario.
f)
La función 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 están
actualmente disponibles con los siguientes campos: Nombre del propietario, tipo
de transacción (venta o alquiler), costo de la transacción, características del
inmueble (cantidad de habitaciones, cantidad de baños, 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 función 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 función miembro pública.
4.
Leer N números por el teclado y almacenarlos en un arreglo de
objetos a través de una función definida por el usuario. Diseñar un programa en
C++ con tres funciones amigas para determinar en cada caso respectivamente: si
el número es capicua, cantidad de divisores y el cubo del número. Ir
visualizando para cada número y en forma de columnas los resultados que
retornen las funciones amigas de la clase.
5.
Leer N números por el teclado y almacenarlos en un arreglo de
objetos a través de una función definida por el usuario. Diseñar un programa en
C++ con tres funciones amigas para determinar en cada caso respectivamente: si
el número es primo, perfecto, par o impar. Ir visualizando para cada número 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 contraseña iguales para tener acceso al sistema de
transacciones u operaciones de los clientes del banco. Diseñar un programa en
C++ con menús de operaciones para efectuar lo siguiente:
a)
Use funciones miembros públicas para introducir y validar el
nombre de usuario y contraseña dependiendo del tipo de empleado seleccionado
por el usuario.
b)
Si la validación realizada en el punto anterior es correcta a
través 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:
·
Gerente: Puede cargar, modificar y consultar datos de los
clientes.
·
Subgerente: Solo puede cargar y consultar datos de los clientes.
·
Cajeros: Solo puede consultar datos de los clientes.
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 año) 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 públicas:
Nombre del empleado, nombre de usuario, contraseña, tipo de empleado, sueldo y
prima; cargar y listar los datos de los empleados. Aplicar sobrecarga de
funciones constructoras.