Documentos de Académico
Documentos de Profesional
Documentos de Cultura
metodo1 (parmetros);
metodoN (parmetros);
atributo1;
atributoN;
Funciones Amigas
Una funcin amiga de una clase se define por fuera del alcance directo de
los miembros privados de dicha clase, pero an 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
{
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();
}
//Programa 2: Procesar informacin 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<< "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();
}
//Programa 3: Efectuar la asignacin 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 despus 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);
}
else
return(-1);
// salario incorrecto
// salario equivocado
}
void empleado::mostrar_empleado(void)
{
cout << "Empleado: " << nombre << endl;
cout << "Nmero: " << 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 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();
}
//Programa 5: Efectuar la invocacin 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 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: Implementacin de una funcin constructora sin parmetros.
#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<<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: Implementacin de una funcin constructora con parmetros.
#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 << "Nmero: " << numero << endl;
cout << "Salario: Bs." << salario << endl;
}
void main()
{
char nom[15];
float sal;
int num;
cout<< "Nombre:";
cin >> nom;
cout<< "Nmero:";
cin >> num;
void main()
{
empleado trabajador("Feliz Guerra", 101, 10101.0);
empleado gerente("Juana Prez", 102);
trabajador.mostrar_empleado();
gerente.mostrar_empleado();
cout<<"\nPresione una Tecla para Continuar";
getch();
}
//Programa 10: Implementacin de una funcin 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 << "Nmero: " << numero << endl;
cout << "Salario: Bs." << salario << endl;
}
void main()
{
char nom[15];
float sal;
int num;
cout<< "Nombre:";
cin >> nom;
cout<< "Nmero:";
{
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 12: Implementacin 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 funcin amiga:
";
m.imprimir();
cout<<"Dar un valor para x:";
cin>>n;
asignar_valor(&m,n);
cout<<"El valor de la variable x despus de activar la funcin amiga:
";
m.imprimir();
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();
}