Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3/18/13
3/18/13
FORMAS DE HERENCIA
1. Cuando una clase escrita no llega a cubrir
3/18/13
CLASES
Cuando una clase hereda de otra clase se le
3/18/13
de:
3/18/13
public: Accesibles desde cualquier funcin del private: Slo pueden acceder a ellos
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
TIPOS DE HERENCIA
La Herencia Simple. Una clase derivada tiene
un slo padre.
3/18/13
HERENCIA SIMPLE
3/18/13
HERENCIA MULTIPLE
3/18/13
3/18/13
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.
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
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
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
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.
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
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
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.
3/18/13
construccin. derivada,
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 }
3/18/13
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;