1. ¿Qué es una función virtual pura ?
Respuesta Una función virtual pura (o función abstracta) en C++ es una función virtual para la cual no tenemos implementación, solo la declaramos. Una función virtual pura se declara asignando 0 en la declaración. Vea el siguiente ejemplo.
// An abstract class class Test { // Data members of class public: // Pure Virtual Function virtual void show() = 0; /* Other members */ };
2. ¿Qué es la clase abstracta?
Respuesta Una clase que contiene al menos una función virtual pura se conoce como clase abstracta. ver el siguiente ejemplo
// An abstract class class Test { // Data members of class public: // Pure Virtual Function virtual void show() = 0; /* Other members */ };
en el ejemplo anterior, Prueba es una clase abstracta porque tiene una función virtual pura.
Algunos datos interesantes sobre la clase abstracta
1) No podemos crear un objeto de clase abstracta.
// pure virtual functions make a class abstract #include <iostream> using namespace std; class Test { int x; public: virtual void show() = 0; int getX() { return x; } }; int main(void) { Test t; return 0; }
Producción :
Compiler Error: cannot declare variable 't' to be of abstract type 'Test' because the following virtual functions are pure within 'Test': note: virtual void Test::show()
2. Podemos tener punteros y referencias de tipo de clase abstracta.
Por ejemplo, el siguiente programa funciona bien.
#include <iostream> using namespace std; class Base { public: virtual void show() = 0; }; class Derived : public Base { public: void show() { cout << "In Derived \n"; } }; int main(void) { Base* bp = new Derived(); bp->show(); return 0; }
Producción:
In Derived
3. Si no anulamos la función virtual pura en la clase derivada, la clase derivada también se convierte en una clase abstracta.
El siguiente ejemplo demuestra lo mismo.
#include <iostream> using namespace std; class Base { public: virtual void show() = 0; }; class Derived : public Base { }; int main(void) { Derived d; return 0; }
producción:
Compiler Error: cannot declare variable 'd' to be of abstract type 'Derived' because the following virtual functions are pure within 'Derived': virtual void Base::show()
3. ¿Cuál es el resultado de este programa?
#include <iostream> using namespace std; class Test { protected: int width, height; public: void set_values(int a, int b) { width = a; height = b; } virtual int area(void) = 0; }; class r : public Test { public: int area(void) { return (width * height); } }; class t : public Test { public: int area(void) { return (width * height / 2); } }; int main() { r rect; t trgl; Test* ppoly1 = ▭ Test* ppoly2 = &trgl; ppoly1->set_values(4, 5); ppoly2->set_values(4, 5); cout << ppoly1->area(); cout << ppoly2->area(); return 0; }
producción:
2010
Explicación: En este programa, estamos calculando el área de un rectángulo y
un triángulo usando una clase abstracta.
4. ¿Cuál es el resultado de este programa?
#include <iostream> using namespace std; class Base { public: virtual void print() const = 0; }; class DerivedOne : virtual public Base { public: void print() const { cout << "1"; } }; class DerivedTwo : virtual public Base { public: void print() const { cout << "2"; } }; class Multiple : public DerivedOne, DerivedTwo { public: void print() const { DerivedTwo::print(); } }; int main() { Multiple both; DerivedOne one; DerivedTwo two; Base* array[3]; array[0] = &both; array[1] = &one; array[2] = &two; for (int i = 0; i < 3; i++) array[i]->print(); return 0; }
producción
212
Explicación: en este programa, estamos ejecutando estos en función de la condición dada en la array. Entonces se está imprimiendo como 212.
5. ¿Cuál es el resultado de este programa?
#include <iostream> using namespace std; class sample { public: virtual void example() = 0; }; class Ex1 : public sample { public: void example() { cout << "GeeksForGeeks"; } }; class Ex2 : public sample { public: void example() { cout << " is awesome"; } }; int main() { sample* arra[2]; Ex1 e1; Ex2 e2; arra[0] = &e1; arra[1] = &e2; arra[0]->example(); arra[1]->example(); }
Producción:
GeeksForGeeks is awesome
Explicación: en este programa, estamos combinando las dos declaraciones de dos clases e imprimiéndolas usando una clase abstracta.
Publicación traducida automáticamente
Artículo escrito por Yogesh Shukla 1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA