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_
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;
}
poi ho preso una classe che deriva dalla base e ho modificato entrambi i metodi:
codice:
#ifndef _DERIVATA1_
#define _DERIVATA1_
#include "base.h"
class derivata1: public base
{
public:
derivata1(void);
~derivata1(void);
void uno();
void due();
};
#endif // _DERIVATA1_
codice:
#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;
}
funzione di stampa
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();
}
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]);
}
}
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?