- Encapsulamento e Extensibilidade de Tipo
- Herança
- Polimorfismo
- Sobrecarga (Overload)
- Funções Virtuais
- Membros Estáticos de uma Classe
- Templates de Função
- Modelos de classes
- Classes abstratas
Classes abstratas e funções meramente virtuais (puras)
As classes abstratas estão projetadas para criar entidades generalizadas, cuja base, no futuro, prevê a criação de classes derivadas mais específicas. Uma classe abstrata é uma classe que pode ser utilizada apenas como classe base para alguma outra classe, por isso é impossível criar um objeto do tipo classe abstrata
Uma classe, que contenha pelo menos uma função meramente virtual, é abstrata. Portanto, as classes derivadas da classe abstrata devem implementar todas as suas funções meramente virtuais, caso contrário, elas serão também classes abstratas.
A função virtual é declarada como "pura" utilizando a sintaxe do especificador de pureza. Consideremos, como exemplo, uma classe CAnimal, criada apenas para fornecer funções comuns - são os próprios objetos do tipo CAnimal que têm um caráter demasiado geral para um uso prático. Assim, a classe CAnimal é uma boa candidata para classe abstrata:
class CAnimal |
Aqui a função Sound() é meramente virtual, porque é declarada com o especificador da função meramente virtual PURE (=0).
São funções meramente virtuais apenas aquelas funções virtuais para as quais é exibido o especificador de pureza PURE, nomeadamente: (=NULL) ou (=0). Exemplo de declaração e utilização de uma classe abstrata:
class CAnimal
|
Restrições sobre o uso de classes abstratas
Quando você chamar, com o construtor, uma função virtual pura (direta ou indiretamente), o resultado será incerto.
//+------------------------------------------------------------------+
|
No entanto, os construtores e destruidores de classes abstratas podem chamar outras funções membro.