3.4.1 Herencia y Composición

 

Herencia 

 

Una de las principales propiedades de las clases es la herencia. Esta propiedad permite crear nuevas clases a partir de clases existentes, conservando las propiedades de la clase original y añadiendo otras nuevas.

 

La nueva clase obtenida se conoce como clase derivada, y las clases a partir de las cuales se deriva, clases base. Además, cada clase derivada puede usarse como clase base para obtener una nueva clase derivada. Y cada clase derivada puede serlo de una o más clases base. En este último caso se hablará de derivación múltiple.

 

Esto permite crear una jerarquía de clases tan compleja como sea necesario

 

Características importantes de la herencia

 

  • No se modifica la clase existente
  • La nueva clase hereda de la clase base:
    • Las variables miembro (datos)
    • Las funciones miembro (métodos)
    • Es un mecanismo de reutilización de código
    • Se genera una Relación es-un (Subtipo-Tipo)
    • A nivel de conjuntos: el conjunto de elementos que pertenece a un tipo incluye a los del subtipo

 

Los siguientes elementos de la clase base no se heredan:

 

  • Constructores y destructores.
  • Funciones y datos estáticos de la clase.
  • Funciones amigas y operadores sobrecargados.

 

Si no se especifica el tipo de derivación, C++ supone que el tipo de herencia es private.

 

 

La forma general de declarar clases derivadas es la siguiente:

 

 

 

                                  class <clase_derivada> :

 

                                  [public|private] <base1> [,[public|private] <base2>] {};

 

 

 

Para cada clase base se puede definir el tipo de acceso, public, protected o private.

Si no se especifica ninguno, por defecto se asume que es private. Por lo que los miembros heredados de la base pasan a tener el tipo según la siguiente tabla.

 

Public

 

  • públicos → públicos
  • protegidos → protegidos
  • privados → INACCESIBLES

 

Protected

 

  • públicos → protegidos
  • protegidos → protegidos
  • privados → INACCESIBLES

 

Prívate

 

  • públicos → privados
  • protegidos → privados
  • privados → INACCESIBLES

 

 

Composición

 

La composición de clases permite que un objeto de una clase pueda contener a otro objeto de cualquier otra clase. Relación de agregación: tener-un.

                                    Ejemplo: Un empleado contiene un objeto de tipo fecha.

Se accede a las funciones miembro a través del objeto.

 

Ejemplo: siguiendo con el ejemplo anterior de los empleados, empleado.fecha.mostrar(). El objeto se ha definido como público.

 

Sintaxis:

                                                             class nombre_clase{

                                                             ....

                                                             class objeto;

                                                             }

Cuando se crea un objeto se invoca automáticamente a los constructores de los objetos miembros. Primero se llama a los constructores de los objetos miembro (según el orden en el que se han declarado) y después el constructor de la clase global.

 

                                                                                                                                              Arriba