Neste tutorial, aprenderemos sobre funções virtuais abstratas e classes abstratas com a ajuda de exemplos.
Antes de aprendermos sobre funções puramente virtuais, certifique-se de verificar estes tutoriais:
- Herança C ++
- Funções virtuais C ++
Funções virtuais puras C ++
Funções puras virtuais são usadas
- se uma função não tem qualquer uso na classe base
- mas a função deve ser implementada por todas as suas classes derivadas
Vamos dar um exemplo,
Suponha, temos derivado Triangle
, Square
e Circle
as classes da Shape
classe, e queremos calcular a área de todas essas formas.
Nesse caso, podemos criar uma função virtual pura nomeada calculateArea()
no Shape
. Desde que é uma função virtual pura, todas as classes derivadas Triangle
, Square
e Circle
deve incluir a calculateArea()
função com a implementação.
Uma função virtual pura não possui o corpo da função e deve terminar com = 0
. Por exemplo,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Observação: a = 0
sintaxe não significa que estamos atribuindo 0 à função. É apenas a maneira como definimos funções virtuais puras.
Classe Abstrata
Uma classe que contém uma função virtual pura é conhecida como classe abstrata. No exemplo acima, a classe Shape
é uma classe abstrata.
Não podemos criar objetos de uma classe abstrata. No entanto, podemos derivar classes deles e usar seus membros de dados e funções de membro (exceto funções virtuais puras).
Exemplo: classe abstrata C ++ e função virtual pura
// C++ program to calculate the area of a square and a circle #include using namespace std; // Abstract class class Shape ( protected: float dimension; public: void getDimension() ( cin>> dimension; ) // pure virtual Function virtual float calculateArea() = 0; ); // Derived class class Square : public Shape ( public: float calculateArea() ( return dimension * dimension; ) ); // Derived class class Circle : public Shape ( public: float calculateArea() ( return 3.14 * dimension * dimension; ) ); int main() ( Square square; Circle circle; cout << "Enter the length of the square: "; square.getDimension(); cout << "Area of square: " << square.calculateArea() << endl; cout << "Enter radius of the circle: "; circle.getDimension(); cout << "Area of circle: " << circle.calculateArea() << endl; return 0; )
Resultado
Insira o comprimento para calcular a área de um quadrado: 4 Área do quadrado: 16 Insira o raio para calcular a área de um círculo: 5 Área do círculo: 78,5
Neste programa, virtual float calculateArea() = 0;
dentro da Shape
classe está uma função virtual pura.
É por isso que devemos fornecer a implementação de calculateArea()
em ambas as nossas classes derivadas, ou obteremos um erro.