Classes abstratas
Uma classe abstrata em C++ é uma classe que serve como base para outras classes e não pode ser instanciada diretamente. O seu principal objetivo é definir uma interface comum para as classes derivadas, forçando-as a implementar determinados métodos. Isso é feito por meio de funções virtuais puras, declaradas com o operador = 0.
Como declarar uma classe abstrata
Para tornar uma classe abstrata, basta declarar pelo menos uma função virtual pura:
class Forma {
public:
// Função virtual pura
virtual double area() = 0;
virtual double perimetro() = 0;
};
- Nota: Não é possível criar objetos de
Forma, apenas de suas classes derivadas que implementem todos os métodos puros.
Implementando classes derivadas
As classes derivadas devem obrigatoriamente implementar todos os métodos virtuais puros, caso contrário, também serão abstratas:
class Circulo : public Forma {
private:
double raio;
public:
Circulo(double r) : raio(r) {}
double area() override {
return 3.1415 * raio * raio;
}
double perimetro() override {
return 2 * 3.1415 * raio;
}
};
Utilização de ponteiros e polimorfismo
Podemos usar ponteiros ou referências para a classe abstrata, permitindo polimorfismo:
int main() {
Circulo c(5.0);
Forma* f = &c;
std::cout << "Área: " << f->area() << std::endl;
std::cout << "Perímetro: " << f->perimetro() << std::endl;
return 0;
}
- Isso permite tratar diferentes formas de maneira uniforme, explorando o polimorfismo.
Restrições
- Não é possível instanciar diretamente uma classe abstrata.
- Se uma classe derivada não implementar todos os métodos virtuais puros, ela também será abstrata e não poderá ser instanciada.
Resumo
- Classe abstrata: contém pelo menos uma função virtual pura (
= 0). - Função virtual pura: obriga as classes derivadas a fornecer uma implementação.
- Não pode ser instanciada, mas pode servir como ponteiro ou referência para objetos das classes derivadas.
- Exemplo de uso: modelar interfaces e garantir que subclasses implementem métodos essenciais.
