Está en la página 1de 18

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;

tipo_dato tipo_objeto::metodo1 (parmetros)


{
instrucciones;
}
:
tipo_dato tipo_objeto::metodoN (parmetros)
{
instrucciones;
}
En algunos casos se puede pensar en la declaracin de atributos en la parte
publica y asi mismo el declarar mtodos en la parte privada.
La parte pblica de la clase implica que los elementos definidos en este
bloque solo se pueden manipular en cualquier lugar del programa a travs 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
mtodos definidos en la parte pblica.
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 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
{

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();
}
//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 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: 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<< (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: Implementacin de una funcin constructora sin parmetros.
//Inicializacin de un vector numrico a travs 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: 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;

cout<< "Salario: Bs.";


cin >> sal;
empleado trabajador(nom, num, sal);
cout<<"\n\nLos datos almacenados despus de ejecutarse la funcin
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 vlido
}
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 << "Nmero: " << numero_empleado << endl;
cout << "Salario: Bs." << salario << endl;
}

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:";

cin >> num;


cout<< "Salario: Bs.";
cin >> sal;
empleado trabajador(nom, num, sal);
cout<<"\n\nLos datos almacenados despus de ejecutarse la funcin
constructora";
trabajador.mostrar_empleado();
cout<<"\nPresione una Tecla para Continuar";
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 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 13: Manipulacin de una funcin 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: 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();
}

También podría gustarte