0% encontró este documento útil (0 votos)
22 vistas33 páginas

Herencia

ll

Cargado por

NYCTER
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas33 páginas

Herencia

ll

Cargado por

NYCTER
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Programación II POO en C++ | Herencia

Programación Orientada a Objetos (POO)

• Una clase puede heredar las propiedades de otra.


• Permite construir una jerarquía de clases, de lo general a lo
particular.
• Permite crear clases, las cuales se derivan de otras clases.

Basado en:
• Stroustrup, B. El Lenguaje de Programación C++. Edición Especial, Addison Wesley, 2002.
• Schildt, H. C++ Guía de autoenseñanza. Osborne McGraw-Hill. 1995.
• Josuttis, N. M. The C++ Standard Library. A tutorial and reference. Addison-Wesley. 1999.
• C++ Language Tutorial at [Link] Liliana Félix
Programación II POO en C++ | Herencia

Clase base

• Clase padre
• Define todas las cualidades comunes a cualquier clase
derivada.

Liliana Félix
Programación II POO en C++ | Herencia

Clase derivada

• Clase hijo
• Incluye las cualidades de su padre y añade las propias.

Liliana Félix
Programación II POO en C++ | Herencia

Ejemplo

Liliana Félix
Programación II POO en C++ | Herencia

Sintaxis

• Especificador de acceso describe el nivel de acceso


máximo de los miembros que son heredados desde la
clase base
id clase derivada

especificador de acceso

id clase base

Liliana Félix
Programación II POO en C++ | Herencia

Los miembros heredados desde CPoligono son:

• ancho
• alto
• toma_valores()

Liliana Félix
Programación II POO en C++ | Herencia

Encapsulamiento

int main() {
CRectangulo r;
CTriangulo t;

r.toma_valores(4, 5); método definido en la clase base


t.toma_valores(4, 5);
cout << [Link]() << endl; método definido particularmente
cout << [Link]() << endl; en cada clase derivada
return 0;
}

Liliana Félix
Programación II POO en C++ | Herencia

Acceso de los miembros de una clase derivada

• Pueden acceder a los miembros protegidos.


• No pueden acceder a los miembros privados.

Liliana Félix
Programación II POO en C++ | Herencia

Acceso de los miembros de una clase derivada

• Pueden acceder a los miembros protegidos.


• No pueden acceder a los miembros privados.

de su clase base

Liliana Félix
Programación II POO en C++ | Herencia

Tabla Resumen de Accesos

Liliana Félix
Programación II POO en C++ | Herencia

Accesos en Herencia

• Los miembros heredados a una clase tienen los mismos


permisos de acceso que en su clase base

Liliana Félix
Programación II POO en C++ | Herencia

Accesos en Herencia

• Los miembros heredados a una clase tienen los mismos


permisos de acceso que en su clase base.
protected
CPoligono::ancho

CRectangulo::ancho

public
CPoligono::toma_valores()

CRectangulo::toma_valores()

Liliana Félix
Programación II POO en C++ | Herencia

Accesos en Herencia

• Los miembros heredados a una clase tienen los mismos


permisos de acceso que en su clase base.

Todos los miembros public en base


serán protected en derivada

class derivada: protected base {



};
derivada puede tener sus propios
miembros public

Liliana Félix
Programación II POO en C++ | Herencia

Accesos en Herencia

• Los miembros heredados a una clase tienen los mismos


permisos de acceso que en su clase base.

Todos los miembros public en base


serán private en derivada

class derivada: private base {



};
derivada puede tener sus propios
miembros public

Liliana Félix
Programación II POO en C++ | Herencia

¿Qué se hereda?

• Cada miembro excepto


• constructor y destructor
• operator=
• amigos
• miembros privados

Liliana Félix
Programación II POO en C++ | Herencia

Constructor y Destructor

• Aunque no son heredados, el constructor/destructor por


defecto se ejecutan automáticamente cuando un nuevo
objeto de una clase derivada es creado/destruido.
• Se puede especificar un constructor en cada definición de
constructor de una clase derivada.

Liliana Félix
Programación II POO en C++ | Herencia

Constructor y Destructor

• Aunque no son heredados, el constructor/destructor por


defecto se ejecutan automáticamente cuando un nuevo
objeto de una clase derivada es creado/destruido.
• Se puede especificar un constructor en cada definición de
constructor de una clase derivada.

class base { class derivada: public base {


… …
public: public:
base(); derivada(arg y) : base(y) { … }
base(arg x) { … } };
};

Liliana Félix
Programación II POO en C++ | Amigos

Amigos (palabra clave: friend)

• Métodos
• Clases

Liliana Félix
Programación II POO en C++ | Herencia

Amigos

• Un método declarado como friend no es miembro de la


clase pero sí puede acceder a los miembros privados de
ésta. Ese método se puede ejecutar en cualquier parte.
• Una clase declarada como friend puede acceder a los
miembros privados de la clase donde es declarada.
• Amistad no es correspondida, a menos que se especifique
explícitamente.
• Amistad no es transitiva.

Liliana Félix
Programación II POO en C++ | Amigos

Ejemplo

Liliana Félix
Programación II POO en C++ | Amigos

Ejemplo

Liliana Félix
Programación II POO en C++ | Amigos

Ejemplo

Liliana Félix
Programación II POO en C++ | Amigos

Ejemplo

Liliana Félix
Programación II POO en C++ | Herencia

Múltiple

• Una clase hereda miembros desde más de una clase.


• Se separan con comas las diferentes clases bases en la
declaración de la clase derivada.

Liliana Félix
Programación II POO en C++ | Herencia

Múltiple

• Una clase hereda miembros desde más de una clase.


• Se separan con comas las diferentes clases bases en la
declaración de la clase derivada.

class base1 { class derivada: public base1, public base2 {


… …
}; };

class base2 {

};

Liliana Félix
Programación II POO en C++ | Herencia

Múltiple

• Una clase hereda miembros desde más de una clase.


• Se separan con comas las diferentes clases bases en la
declaración de la clase derivada.

class base1 { class derivada: public base1, public base2 {


… …
}; };

class base2 {

};

Liliana Félix
Programación II POO en C++ | Herencia

Miembro Virtual

• Miembro de una clase base que puede ser redefinido en


sus clases derivadas.
• Su filosofía subyacente es el polimorfismo.
• Su tipo y sus argumentos (número y tipo) deben ser
idénticos en todas sus redefiniciones, lo cual es diferente de
la sobrecarga.
• Si una clase derivada no redefine un miembro virtual, se
utiliza la definición dentro de la clase base.

Liliana Félix
Programación II POO en C++ | Herencia

Clase polimórfica

• Contiene al menos un método virtual.

Liliana Félix
Programación II POO en C++ | Miembro Virtual

Ejemplo

Liliana Félix
Programación II POO en C++ | Miembro Virtual

Ejemplo

Liliana Félix
Programación II POO en C++ | Herencia

Clase abstracta

• Contiene al menos un método virtual puro (sin


implementación).
• No se puede instanciar.

Liliana Félix
Programación II POO en C++ | Herencia

Clase abstracta

• Contiene al menos un método virtual puro (sin


implementación).

class base {

public:
virtual tipo metodo()=0;
};

Liliana Félix
Programación II POO en C++ | Herencia

Clase abstracta

• Contiene al menos un método virtual puro (sin


implementación).

class base {

public:
virtual tipo metodo()=0; método virtual puro
};

Liliana Félix

También podría gustarte