Raga penso che nn mi sia abbastanza chiaro il concetto di metodi virtuali. In prativa ho preso una classe base e ho definito due metodi di cui uno virtuale:
codice:#ifndef _BASE_ #define _BASE_ class base { public: base(void); ~base(void); void uno(); virtual void due(); }; #endif // _BASE_poi ho preso una classe che deriva dalla base e ho modificato entrambi i metodi:codice:#include "base.h" #include <iostream.h> base::base(void){}; base::~base(void){}; void base::uno() { cout << "Uno in classe base" << endl; } void base::due() { cout << "Due in classe base" << endl; }
codice:#ifndef _DERIVATA1_ #define _DERIVATA1_ #include "base.h" class derivata1: public base { public: derivata1(void); ~derivata1(void); void uno(); void due(); }; #endif // _DERIVATA1_funzione di stampacodice:#include "derivata1.h" #include <iostream.h> derivata1::derivata1(void){}; derivata1::~derivata1(void){}; void derivata1::uno() { cout << "Uno in classe derivata1" << endl; } void derivata1::due() { cout << "Due in classe derivata1" << endl; }
codice:#include "funzione.h" void stampa(base* p_b) { p_b->uno(); p_b->due(); } void stampa(derivata1* p_d1) { p_d1->uno(); p_d1->due(); }
ora andando a lanciare il programma e lanciando i metodi uno() e due() di entrambe le classi ho notato che il risultato è lo stesso di quando non uso la parola "virtual"...mi spiegate un po'meglio questa cosa getilmente?codice:#include "base.h" #include "derivata1.h" #include "derivata2.h" #include "funzione.h" void main() { base A; derivata1 B; stampa(&A); stampa(&B); base array[2]; array[0] = A; array[1] =(derivata1) B; for(int i=0; i<2; i++) { stampa(&array[i]); } }

Rispondi quotando
)
