Está en la página 1de 30

HERENCIA SIMPLE Y DESTRUCTORE S

3/18/13

Generalidades sobre el concepto herencia


Haga clic para modificar el estilo de subttulo del patrn

3/18/13

Proceso por el cual un objeto Puede tomar caracteristicas de otro objeto


3/18/13

FORMAS DE HERENCIA
1. Cuando una clase escrita no llega a cubrir

las necesidades que exige un determinado problema, se

puede retocar el cdigo cambiando las

caractersticas que se requieren, e ignorando el resto.

reutilizacin del cdigo. . Se expresa un determinado problema como

una jerarqua de clases, donde existe una clase base de la

que se derivan otras subclases. La interfaz de

3/18/13

CLASES
Cuando una clase hereda de otra clase se le

asigna los nombres:

Clase derivada Clase hija Subclase Clase descendiente

3/18/13

La clase de la cual hereda recibe el nombre

de:

Clase base clase padre Superclase clase ascendiente

3/18/13

ELEMENTOS DE UNA CLASE


programa.

public: Accesibles desde cualquier funcin del private: Slo pueden acceder a ellos

funciones miembros de la clase, o funciones afines.


protected: Slo pueden acceder a ellos las

funciones miembro de la clase, de clases derivadas o las


funciones afines.
3/18/13

Especificador Desde la de acceso propia clase Public Protected SI SI

Desde las clases derivadas SI SI

Desde el exterior SI NO

private

SI

NO

NO

3/18/13

REUTILIZACION DEL CODIGO Haga clicuna Utilizar para clase modificar como el clase estilo base de subttulo para del
otras y estas a su vez fungir como clase patrn base de otras clases.

3/18/13

EXTENSIBILIDAD
Permite que los programas sean fcilmente

ampliables, as de una clase base se pueden derivar varias clases que tengan un interfaz comn, pero su realizacin y las acciones que llevan a cabo sean diferentes. estos objetos, puede utilizar una funcin miembro a cualquier objeto, pero el efecto ser especficas

El programa principal controlar un grupo de

diferente, dependiendo de las subclases


3/18/13

TIPOS DE HERENCIA
La Herencia Simple. Una clase derivada tiene

un slo padre.

La Herencia Mltiple. Una clase derivada

hereda de ms de una clase base

3/18/13

HERENCIA SIMPLE

3/18/13

HERENCIA MULTIPLE

3/18/13

HERENCIA SIMPLE Una clase derivada tiene un slo padre.

3/18/13

Es cuando una clase derivada hereda de una nica clase, es

decir una clase derivada slo tiene un padre o ascendiente. Por su parte una clase base puede tener tantos descendientes como sean necesarios sin limitacin alguna. Es un sistema jerrquico en forma arborescente, similar a la estructura de directorios de algunos sistemas operativos.

El acceso puede ser private, protected o public. Si se omite

3/18/13

se supone que el acceso es private, de forma que si se quiere dar un acceso public o protected se debe hacer explcitamente.

Acceso Descripcin public Los miembros pblicos de la clase base son miembros

pblicos de la clase derivada.


Los miembros protegidos de la clase base son miembros

protegidos de la clase derivada.


Los miembros privados de la clase base no son accesibles

para la clase derivada.


private Los miembros pblicos de la clase base son miembros

privados de la clase derivada.


Los miembros protegidos de la clase base con miembros
3/18/13

privados de la clase derivada.

Se puede aadir a la clase derivada datos y funciones miembro. Dentro de las funciones miembro de la clase derivada se puede llamar a las funciones miembro y manejar los datos miembro que estn en la seccin pblica y protegida de la clase base. En una clase derivada se heredan todos los datos miembro de la clase base excepto los estticos. Algunas funciones miembro no se heredan de forma automtica. stas son los constructores, el destructor, las funciones amigas, las funciones estticas de la clase, y el operador de asignacin sobrecargado.

3/18/13

Ventajas e inconvenientes de la derivacin privada y protegida


3/18/13

Cuando se utiliza el especificador de

acceso private o el especificador de acceso protected en la herencia, se est asegurando que slo las partes pblicas de la clase derivada podrn ser utilizadas por el resto del programa, y por las otras clases derivadas que se derivan a partir de sta.

3/18/13

El acceso private corta el acceso, no la

herencia, a partir de la clase derivada. El acceso protected corta el acceso, no la herencia, desde el exterior, pero no desde las clases derivadas.

Los inconvenientes llegan porque al

utilizar estos tipos de accesos se est complicando el rbol de herencia, alcanzando una mayor complejidad la determinacin por parte del programador, o de alguien que lea el programa, del derecho de acceso a los miembros de cada clase. 3/18/13

CONSTRUCTORES Y DESTRUCTORES EN LA HERENCIA


3/18/13

Los constructores y destructores no son

heredados por las clases derivadas. Sin embargo, una instancia de una clase derivada contendr todos los miembros de la clase base, y stos deben ser iniciados. En consecuencia, el constructor de la clase base debe ser llamado por el constructor de la clase derivada.

3/18/13

Cuando se escribe un constructor para la

clase derivada, se debe especificar una forma de inicio para la base. La similar a la empleada con los miembros de inicio para los objetos despus de la lista de argumentos del constructor de la clase derivada, la lista de argumentos.

forma de hacerlo es utilizar una sintaxis

miembro de una clase. Esto es, se coloca :

y seguidamente el nombre de la clase base y


3/18/13

Construccin objeto clase derivada: Primero se construye la parte heredada de

la clase(s) base. base.

Se ejecutan constructores de las clases Por ltimo se ejecuta el cdigo del

constructor de la clase derivada.

3/18/13

Destruccin objeto clase derivada: el proceso es a la inversa que en la

construccin. derivada,

Se ejecuta primero el destructor de la clase y a continuacin los de las clases base.

3/18/13

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; }
3/18/13 }

AMBIGEDADES EN LA HERENCIA SIMPLE.

3/18/13

Una clase derivada puede tener un miembro

con el mismo nombre que un miembro de la clase base. Cuando ocurre esto, y se referencia este nombre que est duplicado, el compilador asumir que se desea acceder al miembro de la clase derivada. Este hecho se conoce como anulacin, invalidacin o suplantacin del miembro de la clase base por el miembro de la clase derivada. Para acceder al miembro de la clase base se deber utilizar el operador de resolucin de mbito.
3/18/13

#include <iostream.h> class Base { private: int j; public: Base (int x):j(x){} void Calcula (void) {cout << "\n" << j*j;} }; class Derivada: public Base { int j; public: Derivada (int y, int z) : j(y), Base(z) {} void Calcula (void) {cout << "\n" << j*Base::j;} }; void main() 3/18/13 {

class Primera { protected: int i, j; public: Primera() {i=j=0;} Primera(int a, int b) {i=a;

j=b;} 3/18/13 void Entra_ij(int a, int b)

También podría gustarte