República Bolivariana de Venezuela

Universidad Nacional Experimental del Táchira

Departamento de Ingeniería Informática

Computacion II-Ingeniería Electrónica (415201)
San Cristóbal-Venezuela

 

 

 

 

 

 

 

 

 

 

 

 

 

Clases y Funciones Amigas 

 

 

 

 

 

 

 

 


Tema Perteneciente a la Unidad Nº II: Programación Orientada a Objetos en C++.

 

 

 

 

 

 

 

 

 

 

 

 

Autor: Lcdo. José Froilán Guerrero Pulido

 

 

 

Mayo, 2005

 

 

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.