Clase abstracta de C ++ y función virtual pura

En este tutorial, aprenderemos sobre funciones virtuales abstractas y clases abstractas con la ayuda de ejemplos.

Antes de aprender sobre funciones virtuales puras, asegúrese de consultar estos tutoriales:

  • Herencia de C ++
  • Funciones virtuales de C ++

Funciones virtuales puras de C ++

Se utilizan funciones virtuales puras

  • si una función no tiene ningún uso en la clase base
  • pero la función debe ser implementada por todas sus clases derivadas

Tomemos un ejemplo

Supongamos, hemos derivado Triangle, Squarey Circlelas clases de la Shapeclase, y queremos calcular el área de todas estas formas.

En este caso, podemos crear una función virtual pura nombrada calculateArea()en el Shape. Ya que es una función virtual pura, todas las clases derivadas Triangle, Squarey Circledebe incluir la calculateArea()función de la implementación.

Una función virtual pura no tiene el cuerpo de la función y debe terminar con = 0. Por ejemplo,

 class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );

Nota: La = 0sintaxis no significa que estemos asignando 0 a la función. Es simplemente la forma en que definimos funciones virtuales puras.

Clase abstracta

Una clase que contiene una función virtual pura se conoce como clase abstracta. En el ejemplo anterior, la clase Shapees una clase abstracta.

No podemos crear objetos de una clase abstracta. Sin embargo, podemos derivar clases de ellos y usar sus miembros de datos y funciones miembro (excepto funciones virtuales puras).

Ejemplo: clase abstracta de C ++ y función 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; )

Salida

 Ingrese la longitud para calcular el área de un cuadrado: 4 Área del cuadrado: 16 Ingrese el radio para calcular el área de un círculo: 5 Área del círculo: 78.5

En este programa, virtual float calculateArea() = 0;dentro de la Shapeclase hay una función virtual pura.

Es por eso que debemos proporcionar la implementación de calculateArea()en nuestras dos clases derivadas, o de lo contrario obtendremos un error.

Articulos interesantes...