Classe abstrata C ++ e função virtual pura

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, Squaree Circleas classes da Shapeclasse, 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, Squaree Circledeve 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 = 0sintaxe 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 Shapeclasse 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.

Artigos interessantes...