Metodos virtuales, Herencia
Dev - C++
1.867 visualizaciones desde el 19 de Diciembre del 2020
Demuestra como definir metodos virtuales, y como estos son invocados cuando un objeto es pasado como parametro.
// Ver tambien: http://bit.ly/virtualmethodscpp
#include<iostream>
using namespace std;
class Base {
public: virtual void f() { cout << "Base" << endl; }
};
class D1 : public Base {
void f() { cout << "D1" << endl; }
};
class D2 : public Base {
void f() { cout << "D2" << endl; }
};
void puntero(Base *b) { b->f(); }
void referencia(Base &b) { b.f(); }
void base(Base b) { b.f(); }
void test_objetos() {
D1 d1;
D2 d2;
puntero(&d1); puntero(&d2); // D1 D2
referencia(d1); referencia(d2); // D1 D2
base(d1); base(d2); // Base Base
}
void test_puntero_clase_base() {
Base *pd1 = new D1();
Base *pd2 = new D2();
puntero(pd1); puntero(pd2); // D1 D2
referencia(*pd1); referencia(*pd2); // D1 D2
base(*pd1); base(*pd2); // Base Base
delete pd1;
delete pd2;
}
void test_puntero_clase() {
D1 *pd1 = new D1();
D2 *pd2 = new D2();
puntero(pd1); puntero(pd2); // D1 D2
referencia(*pd1); referencia(*pd2); // D1 D2
base(*pd1); base(*pd2); // Base Base
delete pd1;
delete pd2;
}
int main()
{
test_objetos();
test_puntero_clase_base();
test_puntero_clase();
}
No hay comentarios
Codigo similar, con una salida un poco mas verbosa puede verse aqui