Programación General > C/C++
Funciones virtuales y herencia
(1/1)
killrazor:
Hola,
hay algo que no entiendo sobre las funciones virtuales. Si yo tengo estas clases:
--- Código: C++ ---class Base{ public: void func(int a){ cout << "Estoy en la clase Base" << endl;}}; class Derivada:public Base{ public: void func(int a){ cout << "Estoy en la clase Derivada" << endl;}}; int main(){ Base a; a.func(0); Derivada b; b.func(0); return EXIT_SUCCESS;} Sin necesidad de poner la palabra clave virtual, la salida de b.func() seria "Estoy en la clase derivada". Entonces para que sirve la palabra clave virtual? Yo pensaba que si no poniamos virtual, la funcion de la clase derivada quedaba oculta.
ProfesorX:
--- Cita de: "killrazor" ---Yo pensaba que si no poniamos virtual, la funcion de la clase derivada quedaba oculta.
--- Fin de la cita ---
De hecho, si queda oculta, pero eso sucede cuando utilizamos apuntadores genericos para acceder a las clases padre/hijo, es decir, apuntadores de tipo de la clase base.
Mas claro, tomado tus clases de ejemplo, prueba lo siguiente, primero sin virtual, y despues añadele virtual, y entonces si veras la difeencia:
--- Código: C++ --- #include <iostream> using namespace std; class Base{public: void func(int a) { cout << "Estoy en la clase Base" << endl; }}; class Derivada : public Base{public: void func(int a) { cout << "Estoy en la clase Derivada" << endl; }}; int main(){ Base *a[2]; a[0] = new Base(); a[1] = new Derivada(); for (int i = 0; i < 2; i++) { a[i]->func(0); } for (int i = 0; i < 2; i++) { delete a[i]; } return 0;}
Mas informacion:
http://es.wikipedia.org/wiki/Funci%C3%B3n_virtual
Saludos :)
Navegación
Ir a la versión completa