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
, Square
y Circle
las clases de la Shape
clase, 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
, Square
y Circle
debe 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 = 0
sintaxis 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 Shape
es 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 Shape
clase 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.