HERENCIA SIMPLE
Herencia Simple La herencia en C++ es un mecanismo de abstracción creado para
poder facilitar, y mejorar el diseño de las clases de un programa. Con ella se
pueden crear nuevas clases a partir de clases ya hechas, siempre y cuando
tengan un tipo de relación especial. En la herencia, las clases derivadas
“heredan” los datos y la función miembro de las clases base, pudiendo las
clases derivadas redefinir estos comportamientos (polimorfismo) y añadir
comportamientos nuevos propios de las clases derivadas. Para no romper el principio
de encapsulamiento (ocultar datos cuyo conocimiento no es necesario para el uso
de las clases), se proporciona un nuevo modo de visibilidad de los
datos/funciones: “protected”. Cualquier cosa que tenga visibilidad protected se
comportará como pública en la clase Base y en las que componen la jerarquía de
herencia, y como privada en las clases que NO sean de la jerarquía de la
herencia. Antes de utilizar la herencia, nos tenemos que hacer una pregunta, y
si tiene sentido, podemos intentar usar esta jerarquía: Si la frase
<claseB> ES-UN <claseA> tiene sentido, entonces estamos ante un
posible caso de herencia donde clase A será la clase base y clase B la
derivada.
EJEMPLO:
#include<conio.h>
#include <iostream>
using namespace std;
class Vehiculo {
public:
void avanza() {}
};
class Coche : public Vehiculo {
public:
void avanza(void)
{ cout << "Avanza coche." << endl; }
};
class Moto: public Vehiculo {
public:
void avanza(void)
{ cout << "Avanza moto." << endl; }
};
int main()
{
Moto t;
Coche c;
t.avanza();
c.avanza();
return 0;
}
using namespace std;
class Vehiculo {
public:
void avanza() {}
};
class Coche : public Vehiculo {
public:
void avanza(void)
{ cout << "Avanza coche." << endl; }
};
class Moto: public Vehiculo {
public:
void avanza(void)
{ cout << "Avanza moto." << endl; }
};
int main()
{
Moto t;
Coche c;
t.avanza();
c.avanza();
return 0;
}
HERENCIA MÚLTIPLE
La herencia múltiple es el mecanismo que permite al programador
hacer clases derivadas a partir, no de una sola clase base, sino de varias.
Para entender esto mejor, pongamos un ejemplo: Cuando ves a quien te atiende en
una tienda, como persona que es, podrás suponer que puede hablar, comer, andar,
pero, por otro lado, como empleado que es, también podrás suponer que tiene un
jefe, que puede cobrarte dinero por la compra, que puede devolverte el cambio.
La herencia múltiple presenta el conocido problema del diamante. Esté problema
surge cuando dos clases heredan de otra tercera y, además una cuarta clase
tiene cómo padre a las dos últimas. La primera clase padre es llamada A y las
clases B y C heredan de ella, a su vez la clase D tiene cómo padres a B y C. En
esta situación, si una instancia de la clase D llama a un método de la clase A,
¿lo heredará desde la clase B o desde la clase C? Cada lenguaje de programación
utiliza un algoritmo para tomar esta decisión
EJEMPLO:
#include <math.h>
#include <stdio.h>
class Circulo {
float radio;
public:
Circulo(float r) { radio = r; }
float area() { return M_PI*radio*radio; }
};
class Mesa {
float altura;
public:
Mesa(float a) { altura = a; }
float alto() { return altura; }
};
class MesaRedonda : public Mesa, public Circulo {
int color;
public:
MesaRedonda(float r, float a, int c);
int Color() { return color; }
};
MesaRedonda::MesaRedonda(float r, float a, int c) :
Circulo(r), Mesa(a)
{
color = c;
}
void main()
{
MesaRedonda mesa(15.0, 3.0, 5);
printf("\nLas propiedades de la mesa son:");
printf("\nAltura = %0.2f", mesa.alto());
printf("\nArea = %0.2f", mesa.area());
printf("\nColor = %d", mesa.Color());
}
NETGRAFIA:
http://www.itlalaguna.edu.mx/academico/carreras/sistemas/programacion2/CPP9C.pdf
No hay comentarios:
Publicar un comentario