PDF de programación - C++ Herencia

Imágen de pdf C++ Herencia

C++ Herenciagráfica de visualizaciones

Publicado el 25 de Abril del 2018
640 visualizaciones desde el 25 de Abril del 2018
510,4 KB
8 paginas
Creado hace 22a (14/11/2001)
La herencia

La herencia

Recurso muy importante de los
Definir una nueva clase:

lenguajes P.O.O.

– como extensión de otra previamente
– sin modificar la ya existente.

definida.

La nueva clase hereda de la clase

anterior:
– las variables.
– las operaciones .

Principal objetivo/ventaja:

– Reutilización del código.
Ahorro de esfuerzo.
Mayor confianza en el código.

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

51

La herencia en el mundo real.

La herencia. Tipos y subtipos

Tipo

Categoría

Subtipo
subcategoría

Animales

Mamíferos

Aves

Gatos

Leones

Águilas

Palomas

Organización jerárquica de categorías.
Relación es-un.
Relación supertipo-subtipo.

El conjunto de elementos que

pertenecen a un tipo incluye a los
elementos que pertenezcan a sus
subtipos.

Animales
Mamíferos

Aves

Leones

Palomas

Gatos

Águilas

Conjuntos anidados de objetos.
Relación entre tipos y subtipos.

Edificios

Motocicletas

Conjuntos disjuntos. No hay
relación de subtipado entre
estos tipos.

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

52

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

53

La herencia. Tipos y subtipos.

La herencia en la P.O.O.

Principio de subtipos:

“Un objeto de un subtipo puede
aparecer en cualquier lugar donde se
espera que aparezca un objeto del
supertipo.”
– Los animales son capaces de moverse por
– Los mamíferos son capaces de moverse
– Las aves son capaces de moverse por sí
– Los gatos son capaces de moverse por sí

por sí mismos.

sí mismos.

mismas.

mismos.

A la inversa no es cierto.

– Los gatos maullan.
– Los mamíferos maullan.
– Los animales maullan.

Clase base

superclase, padre

Clase derivada
subclase, hija

Empleado

Empleado de
producción

Empleado
comercial

Empleado
Empleado
de
producción

Empleado
comerciales

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

54

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

55

La herencia en la P.O.O.

Herencia de métodos y variables.

El principio de los subtipos también
Una función que recibe un objeto de

se cumple en la P.O.O.

la clase base.
void Despedir ( empleado);

Puede recibir objetos de la clase
base y también de sus derivadas.

empleado e;
empleado_producción ep;
empleado_comerciales ec;

Despedir (e);
Despedir (ep);
Despedir (ec);

Clase
empleado

Nombre
DNI
Sueldo fijo

Cambiar_Sueldo();

Clase
empleado
producción

Num_Piezas
Pts_Pieza

Calcular_Sueldo();

Clase
empleado
comercial

Pts_vendidas

Calcular_Sueldo();

Las clases derivadas reciben las

variables y métodos de la clase base.
Empleado_comercial ec;
Empleado_produccion ep;

ec.Cambiar_Sueldo();
ep.Cambiar_Sueldo();

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

56

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

57

Composición y herencia

Ejemplos de composición y herencia

Composición:


Relación tener-un
Un coche tiene un tipo de motor
Composición significa contener un objeto.



Motor

Coche
class coche
{ ...
private:

Motor _motor;

};

Herencia:


Relación ser-un
Un coche es un vehículo

Herencia significa contener una clase.

Coches

Autobuses

Vehículos

class coche: vehiculo

– Herencia: un empleado es una persona.

Clase persona y clase empleado.
Clase persona y clase domicilio.
– Composición: una persona tiene un

domicilio.

Clase lista y clase nodo de la lista:
– Composición: una lista tiene un puntero
de tipo nodo al nodo que está en cabeza
de la lista (tener-un).

es un empleado.

Clase empresa, clase empleado y
clase jefe de grupo de empleados.
– Herencia entre empleado y jefe: Un jefe
– Composición entre empresa y empleado o
jefe.
Una empresa puede tener una lista de
empleados y otra de jefes.
Por el principio de los subtipos, una
empresa puede tener una única lista
donde aparezcan tanto jefes como
empleados.

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

58

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

59

La herencia en C++

La herencia en C++

Clase Empleado

Clase Empleado
de Producción

Clase Empleado

Comercial

class empleado
{

char nombre[30];
char DNI[9];
long int sueldo;

public:

void CambiarSueldo(long int v);
long int SueldoBase(void)

{ return sueldo; }

};

class empleado_produccion: public empleado
{

int num_piezas;
int ptas_pieza;

public:

long int CalcularSueldo(void);

};

class empleado_comercial: public empleado
{

int ptas_vendidas;

public:

long int CalcularSueldo(void);

};

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

60

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

61

La herencia en C++

La herencia en C++

long int

empleado_produccion::CalcularSueldo(void)

{
return( SueldoBase() +

num_piezas * ptas_pieza );

}

Equivale a:

empleado::SueldoBase()

Los miembros de la clase empleado se pueden
utilizar en las clases derivadas tal y como si
hubiesen sido definidos en éstas

Método de la clase base
empleado::CambiarSueldo()

void main(void)
{ empleado_produccion ep;

ep.CambiarSueldo(100000);

cout << “El sueldo es “

<< ep.CalcularSueldo();

}

Modos de acceso

– private

Lo que es private en la clase base no
es accesible en la clase derivada.

– public

– protected

Lo que definimos como public es
accesible desde cualquier parte.

Lo que definimos como protected en
la clase base:
– es accesible en la clases
derivadas,
– pero no es accesible desde fuera
de las clases derivadas o base.

public

protected

private

Clase

derivada

Accesible Accesible

Fuera

Accesible

No

Accesible

No

Accesible

No

Accesible

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

62

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

63

Tipos de herencia

La herencia en C++

– class <clase_derivada>:<tipo> <clase_base>
– public:

los modos de acceso a los miembros de
la clase base se quedan igual en la clase
derivada.
– protected:

Los miembros “public” de la clase base
pasan a ser “protected”.
El resto se queda igual.

– private:

Todos los miembros de la clase base
pasan a ser “private” en la derivada.

class padre
{ int x;
public:

void Sx(int v) { x=v; }

};
class hija: protected padre
{ int h;
public:

void SetX(int v)

void main(void)
{ hija h;

// h.Sx(5);
// no permitido

h.SetX(5);
}

{ // x=v; no permitido

Sx(v); }

};

Redefinición de miembros
A veces, interesa cambiar en la

subclase la definición de algo
que está en la clase base.

class base
{
protected:

int v;

public:

void Sv(int val) { v=val; }

};

class derivada: public base
{ char v[30]; // re-definición v
public:

void Sv(int val) // re-definición
Sv()

{ itoa(val,10,v); }

};

Lo redefinido no desaparece.

derivada d;
d.base::Sv(5);

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

64

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

65

La herencia en C++

Herencia múltiple

Ejemplo re-definición de métodos

class empleado
{ char nombre[30];

int ptas_hora;
int num_horas;

public:

Clase Empleado

void AsignarNombre(char *nom) {...}
void AsignarHorasPtas(int ptas,

int horas) {...}

int Sueldo(void)

{ return ( ptas_hora * num_horas );
}

};

class empleado_comercial: public empleado
{ int ptas_km;

Clase Empleado

Comercial

int num_km;

public:

void DietasPtas(int ptas,int km) {...}
int Sueldo(void)

{ return ( empleado::Sueldo() +

ptas_km * num_km );

}

}

Sino, sería una llamada recursiva a

empleado_comercial::Sueldo()

– Una clase derivada hereda las

características de más de una clase base.

MATERIAL
ELÉCTRICO

tensión
potencia

ACUMULADOR

ELÉCTRICO

capacidad_carga

Herencia múltiple

COCHE ELÉCTRICO

autonomía

MEDIO DE
TRANSPORTE

velocidad_limite

precio

COCHE

número de puertas

color

COCHE DIESEL

tipo_inyector

COCHE GASOLINA

número_bujías

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

66

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

67

Herencia múltiple en C++

class empleado
{ ...

class comercial
{

int ptas_km;
int num_km;

public:

...
int Sueldo(void);

public:

...
int Sueldo(void)

};

Herencia múltiple

{ return (ptas_km
* num_km);

}

}

class empleado_comercial: public empleado,
public comercial

{
public:

int Sueldo(void)

{ return ( empleado::Sueldo() +

comercial::Sueldo() );

}

}

La herencia en C++
Constructores y destructores en la

herencia:

– Construcción objeto clase derivada:
Primero se construye la parte
heredada de la clase(s) base.
– Se ejecutan constructores de las
clases base.

Por último se ejecuta el código del
constructor de la clase derivada.

– Destrucción objeto clase derivada:

el proceso es a la inversa que en la
construcción.
Se ejecuta primero el destructor de
la clase derivada,
y a continuación los de las clases
base.

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

68

Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

69

La herencia en C++
– Ejemplo (Constructores y destructores en

la herencia):

class base1
{ public:

base1(void) { cout << “base1”; }
˜base1(void) { cout << “base1 D”; }

}

class base2
{ public:

base2(void) { cout << “base2”; }
˜base2(void) { cout << “base2 D”; }

}

class derivada: public base1, public base2
{ public:

derivada(void) { cout << “derivada”; }
˜derivada(void) { cout<< “derivada D”;}

}

void main(void)
{ derivada d;
}

base1
base2
derivada
derivada D
base2 D
base1 D

La herencia en C++

Constru
  • Links de descarga
http://lwp-l.com/pdf10655

Comentarios de: C++ Herencia (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad