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?