- Encapsulación y extensión de tipos
- Herencia
- Polimorfismo
- Sobrecarga
- Funciones virtuales
- Miembros estáticos de una clase
- Plantillas de funciones
- Plantillas de clases
- Clases abstractas
Las clases abstractas y las funciones virtuales puras
Las clases abstractas están diseñadas para crear entidades genéricas, sobre cuya base se supone que se crearán clases derivadas más concretas. Una clase abstracta, es una clase que sólo puede ser utilizada como clase básica para alguna otra clase, por eso no se puede crear un objeto de tipo de clase abstracta.
La clase que contenga aunque sea solo una función virtual pura, es abstracta. Por eso las clases derivadas de una clase abstracta deben implementar todas sus funciones virtuales puras, de lo contrario, serán clases abstractas.
Una función virtual se declara como "pura" con la ayuda de la sintaxis de un especificador puro. Veremos como ejemplo la clase CAnimal, que se crea solo para proporcionar las funciones generales, los propios objetos del tipo CAnimal tienen un carácter demasiado general para la aplicación práctica. De esta forma, la clase CAnimal es un buen candidato a clase abstracta:
class CAnimal |
Aquí la función Sound() es virtual pura, por eso se la declara con el especificador de función virtual pura PURE (=0).
Las funciones virtuales puras son solo aquellas funciones virtuales para las que se indica el especificador puro PURE, y precisamente: (=NULL) o (=0). Ejemplo de declaración y uso de una clase abstracta:
class CAnimal
|
Limitaciones de uso de las clases abstractas
Si el constructor de una clase abstracta invoca una función virtual pura (directa o indirectamente) el resultado es indefinido.
//+------------------------------------------------------------------+
|
Sin embargo, los constructores y destructores de las clases abstractas pueden invocar otras funciones miembro.