Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Reutilizacin de Cdigo
Modelar de una mejor manera el mundo real
Tabla 1.
Miembro (atributo) de
Acceso
de
la clase base
clase derivada
Privado
Privado
protegido
Privado
Pblico
Privado
Privado
Pblico
protegido
Pblico
Pblico
Pblico
Privado
Protegido
protegido
Protegido
Pblico
Protegido
la
Miembro (atributo) de la
clase derivada
Inaccesible
Privado
Privado
Inaccesible
Protegido
Pblico
Inaccesible
Protegido
Protegido
EJEMPLO1:
PROBLEMA: Sumar dos nmeros reales utilizando herencia de clases con el
paradigma OO en C++. La clase base leer los dos datos a sumar, la clase
derivada calcular la suma y mostrar el resultado de la suma. Permita al
usuario decidir cundo terminar, valide la respuesta.
Clase Datos
Atributos
Protegidos:
a,b
Mtodos
Publicos:
leer_a();
leer_b();
Diagrama de Herencia de
Clases
Clase Resultados
Atributos
Protegidos:
c
Mtodos
Pblicos:
entrada();
calcula_c();
escribe_c();
SOLUCIN:
//Programa que suma dos nmeros utilizando la propiedad de herencia simple
//entre una clase Base y una clase Derivada
#include <iostream.h>
#include <ctype.h>
#include <conio.h>
//Clase Base
class Datos
{
protected:
float a,b;
public:
void leer_a();
void leer_b();
};
void Datos::leer_a()
{
cout<<"A=";
cin>>a;
};
void Datos::leer_b()
{
cout<<"B=";
cin>>b;
};
//Clase Derivada
class Resultados:public Datos
{
protected:
float c;
public:
void calcula_c();
void escribe_c();
};
void Resultados::calcula_c()
{
c=a+b;
};
void Resultados::escribe_c()
{
cout<<a<<"+"<<b<<"="<<c;
};
main()
{
Resultados r;
char resp;
do
{
clrscr();
r.leer_a();
r.leer_b();
r.calcula_c();
r.escribe_c();
do
{
cout<<"\n\nContinuar S/N: ";
cin>>resp;
resp=toupper(resp);
}while((resp!='S') && (resp!='N'));
}while(resp=='S');
}
Ejemplo 2: Herencia simple
//Programa que suma dos nmeros utilizando la propiedad de herencia simple
//entre una clase Base y una clase Derivada
#include <iostream.h>
#include <ctype.h>
#include <conio.h>
//Clase Base
class Datos
{
protected:
float a,b;
public:
void leer_a();
void leer_b();
};
void Datos::leer_a()
{
cout<<"A=";
cin>>a;
};
void Datos::leer_b()
{
cout<<"B=";
cin>>b;
};
//Clase Derivada
class Resultados:public Datos
{
protected:
float c;
public:
void calcula_c();
void escribe_c();
void ciclo();
};
void Resultados::calcula_c()
{
c=a+b;
};
void Resultados::escribe_c()
{
cout<<a<<"+"<<b<<"="<<c;
};
void Resultados::ciclo()
{
char resp;
do
{
clrscr();
leer_a();
leer_b();
calcula_c();
escribe_c();
do
{
cout<<"\n\nContinuar S/N: ";
cin>>resp;
resp=toupper(resp);
}while((resp!='S') && (resp!='N'));
}while(resp=='S');
}
main()
{
Resultados r;
r.ciclo();
}
Ejemplo 3: Con miembros pblicos
//Programa que suma dos nmeros utilizando la propiedad de herencia simple
//entre una clase Base y una clase Derivada con miembros pblicos
#include <iostream.h>
#include <ctype.h>
#include <conio.h>
//Clase Base
class Datos
{
public:
float a,b;
void leer_a();
void leer_b();
};
void Datos::leer_a()
{
cout<<"A=";
cin>>a;
};
void Datos::leer_b()
{
cout<<"B=";
cin>>b;
};
//Clase Derivada
class Resultados:public Datos
{
public:
float c;
void calcula_c();
void escribe_c();
void ciclo();
};
void Resultados::calcula_c()
{
c=a+b;
};
void Resultados::escribe_c()
{
cout<<a<<"+"<<b<<"="<<c;
};
void Resultados::ciclo()
{
char resp;
do
{
clrscr();
leer_a();
leer_b();
calcula_c();
escribe_c();
do
{
void escribe_c();
};
void Resultados::entrada()
{
Datos :: leer_a();
Datos :: leer_b();
};
void Resultados::calcula_c()
{
c=a+b;
};
void Resultados::escribe_c()
{
cout<<a<<"+"<<b<<"="<<c;
};
main()
{
Resultados r;
char resp;
do
{
r.entrada();
r.calcula_c();
r.escribe_c();
do
{
cout<<"\n\nContinuar S/N: ";
cin>>resp;
resp=toupper(resp);
}while((resp!='S') && (resp!='N'));
}while(resp=='S');
}
Ejemplo 5: Avanzado
//Programa que suma dos nmeros utilizando la propiedad de herencia simple
//entre una clase Base y una clase Derivada
// Con la complejidad de llamar desde la clase derivada metodos de la clase
base
#include <iostream.h>
#include <ctype.h>
#include <conio.h>
//Clase Base
class Datos
{
protected:
float a,b;
public:
void leer_a();
void leer_b();
};
void Datos::leer_a()
{
cout<<"A=";
cin>>a;
};
void Datos::leer_b()
{
cout<<"B=";
cin>>b;
};
//Clase Derivada
class Resultados:public Datos
{
protected:
float c;
public:
void entrada();
void calcula_c();
void escribe_c();
void ciclo();
};
void Resultados::entrada()
{
Datos :: leer_a();
Datos :: leer_b();
};
void Resultados::calcula_c()
{
c=a+b;
};
void Resultados::escribe_c()
{
cout<<a<<"+"<<b<<"="<<c;
};
void Resultados::ciclo()
{
char resp;
do
{
entrada();
calcula_c();
escribe_c();
do
{
cout<<"\n\nContinuar S/N: ";
cin>>resp;
resp=toupper(resp);
}while((resp!='S') && (resp!='N'));
}while(resp=='S');
};
main()
{
Resultados r;
r.ciclo();
}
Ejemplo 6: Avanzado con miembros pblicos
//Programa que suma dos nmeros utilizando la propiedad de herencia simple
//entre una clase Base y una clase Derivada
// Con la complejidad de llamar desde la clase derivada metodos de la clase
base
#include <iostream.h>
#include <ctype.h>
#include <conio.h>
//Clase Base
class Datos
{
public:
float a,b;
void leer_a();
void leer_b();
};
void Datos::leer_a()
{
cout<<"A=";
cin>>a;
};
void Datos::leer_b()
{
cout<<"B=";
cin>>b;
};
//Clase Derivada
Clase Empleado
Atributos
Protegidos:
Nombre,
ced,edad
Mtodos
Publicos:
leer_datos();
leer_datos();
Diagrama Herencia de
Clases
Clase Administrativo
Atributos
Protegidos:
Categora,desti
no
Mtodos
Pblicos:
leer_datos();
leer_datos();
#include <iostream.h>
#include <conio.h>
#include<ctype.h>
#include<stdlib.h>
//Clase Base
class Empleado
{
protected:
char nombre[50];
long ced;
int edad;
public:
void leer_datos();
void escribir_datos();
};
void Empleado::leer_datos()
{
gotoxy(20,10);
cout<<"Digite el nombre : ";
cin.getline(nombre,50);
gotoxy(20,11);
cout<<"Digite la cedula : ";
cin>>ced;
gotoxy(20,12);
cout<<"Digite la edad : ";
cin>>edad;
}
void Empleado::escribir_datos()
{
gotoxy(20,10);
cout<<"El nombre es : "<<nombre;
gotoxy(20,11);
cout<<"La cedula es : "<<ced;
gotoxy(20,12);
cout<<"La edad es : "<<edad;
}
//Clase Derivada
class Administrativo : public Empleado //Herencia
{
protected:
char categoria[50];
char destino[50];
public:
void leer_datos();
void escribir_datos();
};
void Administrativo::leer_datos()
{
Empleado::leer_datos(); //encapsulamiento
gotoxy(20,13);
cin.get();
cout<<"Digite la categoria : ";
cin.getline(categoria,50);
gotoxy(20,14);
cout<<"Digite el destino : ";
cin.getline(destino,50);
}
void Administrativo::escribir_datos()
{
Empleado::escribir_datos(); //encapsulamiento
gotoxy(20,13);
cout<<"La categoria es : "<<categoria;
gotoxy(20,14);
cout<<"El destino es : "<<destino;
}
main()
{
Administrativo a;
char resp;
do
{
clrscr();
a.leer_datos();
clrscr();
a.escribir_datos();
do
{
cout<<"\n\nContinuar (S/N):";
cin>>resp;
cin.get();
resp=toupper(resp);
}while((resp!='S') && (resp!='N'));
}while(resp=='S');
}
Clase Empleado
Atributos
Protegidos:
Nombre,
ced,edad
Mtodos
Publicos:
leer_empleado();
escribir_emplead
o();
Atributos
Protegidos:
Categora, turno
Mtodos
Pblicos:
leer_admin();
escribir_admin();
Clase Administrativo
Atributos
Protegidos:
Producto, Ventas
Mtodos
Pblicos:
leer_vend();
escribir_vend();
Clase Vendedores
void escribir_admin();
};
void administrativo::leer_admin()
{
gotoxy(20,13);
cout<<"Digite la categoria : ";
cin.getline(categoria,50);
gotoxy(20,14);
cout<<"Digite el destino : ";
cin.getline(turno,50);
}
void administrativo::escribir_admin()
{
gotoxy(20,13);
cout<<"La categoria es : "<<categoria;
gotoxy(20,14);
cout<<"El destino es : "<<turno;
}
class vendedores : public empleado
{
private:
char producto[50];
double ventas;
public:
void leer_vend();
void escribir_vend();
};
void vendedores::leer_vend()
{
gotoxy(20,13);
cout<<"Digite la titulacion : ";
cin.getline(producto,50);
gotoxy(20,14);
cout<<"Digite las ventas : ";
cin>>ventas;
}
void vendedores::escribir_vend()
{
gotoxy(20,13);
cout<<"La titulacion es : "<<producto;
gotoxy(20,14);
cout<<"Las ventas son : "<<ventas;
}
main()
{
clrscr();
administrativo uno;
vendedores dos;
int ele;
char op;
op='S';
while (op=='S')
{
clrscr();
gotoxy(20,22);cout<<" 1 ->> ADMINISTRATIVO. 2 ->> VENDEDORES. ";
gotoxy(20,5);cout<<"Digite que clase de emleado : ";cin>>ele;
if(ele==1)
{
clrscr();
gotoxy(15,5);cout<<"EMPLEADO ADMINISTRATIVO ";
uno.leer_emple();
uno.leer_admin();
clrscr();
uno.escribir_emple();
uno.escribir_admin();
getch();
}
else
if(ele==2)
{
clrscr();
gotoxy(15,5);cout<<"EMPLEADO VENDEDOR ";
dos.leer_emple();
dos.leer_vend();
clrscr();
dos.escribir_emple();
dos.escribir_vend();
}
do
{
gotoxy(20,22);cout<<"DESEA CONTINUAR -S/N- ";
op=getch();
op=toupper(op);
}while((op!='S')&&(op!='N'));
}
}
{
protected:
atributos;
public:
mtodos:
}
cout<<"A=";
cin>>a;
};
//Clase Base2
class Datos2
{
protected:
float b;
public:
void leer_b();
};
void Datos2::leer_b()
{
cout<<"B=";
cin>>b;
};
//Clase Derivada
class Resultados:public Datos1,public Datos2
{
protected:
float c;
public:
void calcula_c();
void escribe_c();
};
void Resultados::calcula_c()
{
c=a+b;
};
void Resultados::escribe_c()
{
cout<<a<<"+"<<b<<"="<<c;
};
main()
{
Resultados r;
char resp;
do
{
clrscr();
r.leer_a();
r.leer_b();
r.calcula_c();
r.escribe_c();
do
{
cout<<"\n\nContinuar S/N: ";
cin>>resp;
resp=toupper(resp);
}while((resp!='S') && (resp!='N'));
}while(resp=='S');
}
Ejemplo2: Avanzado Herencia Mltiple
//Programa que suma dos nmeros utilizando la propiedad de herencia simple
//entre una clase Base y una clase Derivada
// Con la complejidad de llamar desde la clase derivada metodos de la clase
base
#include <iostream.h>
#include <ctype.h>
#include <conio.h>
//Clase Base1
class Datos1
{
protected:
float a;
public:
void leer_a();
};
void Datos1::leer_a()
{
cout<<"A=";
cin>>a;
};
//Clase Base2
class Datos2
{
protected:
float b;
public:
void leer_b();
};
void Datos2::leer_b()
{
cout<<"B=";
cin>>b;
};
//Clase Derivada
#include <conio.h>
//Clase Base
class Datos
{
protected:
float a,b;
public:
void leer_a();
void leer_b();
};
void Datos::leer_a()
{
cout<<"A=";
cin>>a;
};
void Datos::leer_b()
{
cout<<"B=";
cin>>b;
};
//Clase Derivada
class Resultados:public Datos
{
protected:
float c;
public:
void calcula_c();
};
void Resultados::calcula_c()
{
c=a+b;
};
//
class Escribe:public Resultados
{
public:
void escribe_c();
};
void Escribe::escribe_c()
{
cout<<a<<"+"<<b<<"="<<c;
};
//
main()
{
Escribe e;
char resp;
do
{
clrscr();
e.leer_a();
e.leer_b();
e.calcula_c();
e.escribe_c();
do
{
cout<<"\n\nContinuar S/N: ";
cin>>resp;
resp=toupper(resp);
}while((resp!='S') && (resp!='N'));
}while(resp=='S');
}
Instrucciones: Haga uso de la herencia (simple y mltiple) de clases con el
paradigma OO en C++.
EJERCICIO1: Calcule el rea de circunferencias. Permita al usuario decidir
cundo terminar y valide la respuesta.
EJERCICIO2: Calcule las races reales y complejas de ecuaciones de segundo
grado. Permita al usuario decidir cundo terminar y valide la respuesta.