Las interfaces no son más que una forma de describir el comportamiento de una clase sin comprometerse con la implementación de la clase. En la programación de C++ no existe un concepto integrado de interfaces. Para crear una interfaz, necesitamos crear una clase abstracta que tenga solo métodos virtuales puros. En C++, las interfaces también se denominan clases abstractas puras.
Funciones virtuales puras
Una función virtual pura es una función en la que solo declaramos la función pero no la definición de la función. La implementación de métodos virtuales puros se realiza en la clase derivada mediante la anulación de método/función. Se dice que una función es una función virtual pura si se define en la clase de la siguiente manera:
nombre de función de tipo de datos virtual (parámetro 1, parámetro 2,…) = 0
Clase abstracta
Una clase abstracta es una clase que está especialmente diseñada para ser utilizada como clase base. La clase abstracta debe tener al menos una función virtual pura. Puede tener variables y funciones normales. Las clases derivadas de una clase abstracta deben implementar todas las funciones virtuales puras de su clase base o, de lo contrario, también se vuelven abstractas.
Importancia de las interfaces
- Cualquier clase derivada de la clase abstracta pura (Interfaz) debe implementar todos los métodos de la clase base, es decir, la Interfaz.
- Los punteros de interfaz se pueden pasar a funciones y clases, por lo que podemos llamar a las funciones de la clase derivada desde allí.
Reglas durante el uso de interfaces
- Declare solo funciones virtuales puras. (Sin definición)
- Para funciones virtuales puras asigne solo 0.
- No se puede crear una instancia de la clase.
- Podemos crear un puntero a la instancia de la clase derivada con una referencia de una clase abstracta base.
Veamos algunos ejemplos de muestra de programas para crear la interfaz.
Ejemplo 1: en el siguiente código, se crea una interfaz GFG, es decir, una clase abstracta con un método virtual puro, y su función se implementa en la clase secundaria, y en la función principal, llamamos al método returnString() siguiendo las reglas de usar interfaces.
C++
// C++ program to implement // Interface #include <iostream> #include <string> using namespace std; // Interface(Abstract class // with pure virtual function) class GFG { public: virtual string returnString() = 0; }; class child : public GFG { public: string returnString() { return "GeeksforGeeks"; } }; // Driver code int main() { child childObj; GFG* ptr; ptr = &childObj; cout << ptr->returnString(); return 0; }
GeeksforGeeks
Ejemplo 2: en el siguiente código, se crea un nombre de sitio web de clase abstracta con una función virtual pura en él. Entonces actúa como una interfaz. La funcionalidad del método getName() se implementa en las dos clases secundarias de la clase base.
C++
// C++ program to implement // the Interface #include <iostream> #include <string> using namespace std; // Interface(Abstract class // with pure virtual function) class websiteName { public: virtual string getName() = 0; }; class shortForm : public websiteName { public: string getName() { return "GFG"; } }; class fullForm : public websiteName { public: string getName() { return "GeeksforGeeks"; } }; // Driver code int main() { shortForm obj1; fullForm obj2; websiteName* ptr; ptr = &obj1; cout << "Short form - " << ptr->getName(); ptr = &obj2; cout << "\nFull form - " << ptr->getName(); return 0; }
Short form - GFG Full form - GeeksforGeeks
Publicación traducida automáticamente
Artículo escrito por akhilvasabhaktula03 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA