Está en la página 1de 6

Herencia simple.

Cuando sólo se tiene una clase base de la cual hereda la clase derivada, se dice que hay
herencia simple. Sin embargo, la herencia simple no excluye la posibilidad de que de una
misma clase base se pueda derivar más de una subclase o clase derivada

Cuando se necesita representar un concepto general y a partir de éste, conceptos más
específicos, resulta conveniente organizar la información usando herencia.
Esto permite compartir atributos y métodos ya definidos, evita la duplicidad y, por otra parte,
proporciona mayor claridad en la representación que se haga de la información. Es decir, se
logra un mejor diseño de la solución del problema.
Existen numerosos casos en los cuales se da este tipo de relación.

En la figura 2a, la clase Persona es la clase base y Empleado es la clase derivada. Un objeto
de esta clase también es un objeto de la clase “Persona”, por lo tanto tendrá los atributos y
métodos de ambas clases.
En la figura 2b, la clase Mamífero es la clase base y Vacuno y Equino son las clases derivadas.
En este caso, se dice que todo “Vacuno” y todo “Equino” también son objetos de la clase
“Mamífero” y en consecuencia tendrán todos los atributos y métodos que heredan de la clase
base.
La herencia pública permite que los miembros privados de la clase base se puedan acceder
sólo por medio de los métodos de dicha clase.
Los miembros protegidos de la clase base podrán ser usados por los métodos de las clases
derivadas, pero no por sus clientes.
Los miembros públicos estarán disponibles para los métodos de las clases derivadas y para
todos sus clientes.
class Base
{ private:
// Miembros declarados en la sección privada: accesibles sólo para miembros de esta
clase
protected:
/* Miembros declarados en la sección protegida: accesibles sólo para miembros de
esta
clase y de sus derivadas */
public:

 Solución al problema de la herencia repetida.. Para ello se utiliza la siguiente sintaxis: Cuando se declara un objeto del tipo de la clase derivada se invoca al constructor de ésta. En el cuerpo de la clase derivada se harán las asignaciones correspondientes a los atributos propios de esta clase. La Herencia Repetida Cuando una clase hereda de 2 ó más superclases que a su vez heredan de la misma superclase  Se permite la duplicación de superclases. La declaración del constructor de la clase “Derivada” debe incluir un llamado al constructor de la clase “Base”.// Miembros declarados en la sección pública: accesibles para todos }. En cuanto a los parámetros. De este constructor lo primero que se ejecuta es la llamada al constructor de la clase base. Para declarar una clase derivada de una clase previamente definida se utiliza la siguiente Sintaxis: Con la palabra reservada public en el encabezado de la declaración de la clase “Derivada” se hace referencia a que dicha clase hereda los atributos y métodos de la clase “Base”. pero requiere el uso de nombres cualificados totalmente para referirse a los miembros de una copia específica. al invocar al constructor de la clase base se le deben proporcionar los parámetros que necesita para asignar valores a los atributos propios de la clase base y que la clase derivada hereda.Clases virtuales. y posteriormente se ejecutan sus propias instrucciones. C++ ( class B: public B { ) �Caso (b) .

h> #include<windows. . #include<iostream> #include<conio.int. class monitor{ //INICIO DE LA CLASE EMPLEADO public: //CONSTRUCTOR monitor(char *.long.int).h> using namespace std. Abuela(){ }.h> #include<string. } 2) Herencia múltiple. Se puede tratar referencias a la misma clase como si fueran la misma clase C++ --� Superclases repetidas como clases base virtual Subclase nombra otra clase como su superclase y la marca como virtual. Madre_2(). public Madre_2 { … Hija() : Madre_1(). para indicar que es una clase compartida ( class B: virtual public B { ) �Caso (a) Duplicación de propiedades en herencia múltiple En C++ se resuelve usando herencia virtual: class Madre_1: virtual public Abuela{ … } class Madre_2: virtual public Abuela{ … } class Hija: public Madre_1.

monitor::monitor(char *tipo... monitor::resolucion_x=x_res.: "<<tipo<<endl..: "<<resolucion_x<<resolucion_y<<endl.tipo)...: "<<colores<<endl..int memoria){ tarjeta_principal::procesador=procesador.int). tarjeta_principal::memoria=memoria. cout<<"Resoluci¢n... int y_res){ strcpy(monitor::tipo. } void tarjeta_principal::muestra_tarjeta(){ . int resolucion_y..//FUNCIONES void muestra_pantalla(void).. int velocidad. }. }. private: int procesador.... long colores.. cout<<"Colores. } void monitor::muestra_pantalla(void){ cout<<"Tipo de Video..int x_res.int. tarjeta_principal::tarjeta_principal(int procesador. monitor::resolucion_y=y_res. void muestra_tarjeta(void). private: char tipo[30].... int memoria.long colores. } class tarjeta_principal{ public: tarjeta_principal(int. tarjeta_principal::velocidad=velocidad. int resolucion_x. monitor::colores=colores.int velocidad.

..: "<<marca<<endl.: "<<disco_duro<<" Mbytes"<<endl.. computadora::disco_flexible=disco_flexible.: "<<memoria<<" Mb"<<endl.. void muestra_computadora(void). cout<<"Velocidad..int velocidad. long.1.colores.... computadora::disco_duro=disco_duro. int disco_duro.... cout<<"Unidad de disquetes.212. muestra_pantalla().velocidad.char *pantalla.."SVGA".muestra_computadora()..480.. getch().. } //FIN MAIN . int. int. int. computadora mi_pc("Compaq". } void computadora::muestra_computadora(void){ cout<<"Marca. float.. char *... } int main(void){ //INICIO MAIN system("cls")...public tarjeta_principal{ public: computadora(char *.640.marca).long colores..int res_x.16000000...486.int procesador..66. } class computadora:public monitor.tarjeta_principal(procesador.44. }.... computadora::computadora(char *marca.cout<<"Procesador...res_x.... mi_pc..int disco_duro.. private: char marca[50].: "<<procesador<<endl.. muestra_tarjeta().float disco_flexible. cout<<"Memoria.. int).res_y). int.int res_y. int. float disco_flexible. cout<<"Disco duro...int memoria):monitor(pantalla.: "<<disco_flexible<<" Mbytes"<<endl.8)..memoria ){ strcpy(computadora::marca.: "<<velocidad<<" Mhz"<<endl.