Nadaa

Solo disponible en BuenasTareas
  • Páginas : 7 (1643 palabras )
  • Descarga(s) : 4
  • Publicado : 26 de mayo de 2010
Leer documento completo
Vista previa del texto
4.11.2b  Herencia simple (I)
§1  Sinopsis
A continuación exponemos otra alternativa a la definición de clases cuando no se parte desde cero ( 4.11.2a), sino de una clase previamente definida (clase-base o superclase). Esta forma es conocida como herencia simple; cuando una clase deriva de una antecesora heredando todos sus miembros (la herencia múltiple es tratada en 4.11.2c).
Fig. 1 |
Nota:las uniones ( 4.6) no pueden tener clases-base ni pueden utilizarse como tales.

Es clásico señalar como ejemplo, que la clase Triángulo deriva de la clase general Polígono, de la que también derivan las clases Cuadrado, Círculo, Pentágono, etc. (ver figura) [1].  Cualquier tipo de polígono comparte una serie de propiedades generales con el resto, aunque los triángulos tienen particularidadesespecíficas distintas de los cuadrados, estos de los pentágonos y de los círculos, etc. Es decir, unas propiedades (comunes) son heredadas, mientras que otras (privativas) son específicas de cada descendiente.
Puesto que una clase derivada puede servir a su vez como base de una nueva herencia, se utilizan los términos base directa para designar la clase que es directamente antecesora de otra, ybase indirecta para designar a la que es antecesora de una antecesora.  En nuestro caso, la clase Poligono es base directa de Triángulo, y base indirecta de Isósceles.
Nota: las denominaciones superclase directa y superclase indirecta tienen respectivamente el mismo significado que base directa e indirecta.
§2  Sintaxis
Cuando se declara una clase D derivada de otra clase-base B, se utiliza lasiguiente sintaxis:
class-key nomb-clase :  clase-base {};
  es un especificador opcional denominado modificador de acceso, que determina como será la accesibilidad de los miembros que se heredan de la clase-base en los objetos de las subclases ( 4.11.2b-II).
El significado del resto de miembros es el que se indicó al tratar de la declaración de una clase ( 4.11.2), con la particularidad que, enla herencia simple, se reduce a un solo identificador: clase-base.
Ejemplo
class Circulo : public Poligono { };
En este caso, la nueva clase Circulo hereda todos los miembros de la clase antecesora Poligono (con las excepciones que se indican a continuación), pero debido al modificador de acceso utilizado (public), solo son utilizables los miembros que derivan de públicos y protegidos de lasuperclase Poligono (las cuestiones relativas al acceso se detallan en la página siguiente Pág. 2).
En este supuesto, resulta evidente que la hipotética función mover (en el plano) de la clase círculo será distinta de la misma función en la clase triángulo, aunque ambas desciendan de la misma clase polígono. En el primer caso sería suficiente definir las nuevas coordenadas del centro, mientrasque en el segundo habría que definir las nuevas coordenadas de, al menos, dos puntos.
§3  Excepciones en la herencia
En principio, una clase derivada hereda todos los miembros (propiedades y métodos) de la clase base [2], con las excepciones que siguen de elementos que no pueden heredarse:
* Constructores  ( 4.11.2d1)
* Destructores  ( 4.11.2d2)
* Miembros estáticos  ( 4.11.7). * Operador de asignación = sobrecargado  ( 4.9.18a)
* Funciones friend  ( 4.11.2a1).
§4  Razón de la herencia
Como se ha indicado ( 4.11.1), derivar una nueva clase de otra existente, solo tiene sentido si se modifica en algo su comportamiento y/o su interfaz, y esto se consigue de tres formas no excluyentes:
* Añadiendo miembros (propiedades y/o métodos), que no existían en la clasebase. Estos nuevos miembros serían privativos de la clase derivada.
* Sobrescribiendo métodos con distintos comportamientos que en la clase primitiva (sobrecarga).
* Redefiniendo propiedades que ya existían en la clase base con el mismo nombre. En este caso, se crea un nuevo tipo de variable en la clase derivada con el mismo nombre que la anterior, con el resultado de que coexisten dos...
tracking img