int Funzione()=0;
non l'ho mai visto (ma magari esiste non lo so).
forse ti riferisci a
In questo caso si dice che la classe Classe è una classe astratta (in java sarebbe avresti scritto abstract invece di virtual ... = 0) ovvero non può essere istanziata.codice:class Classe { virtual int Funzione()=0; }
Quando crei un metodo virtuale il compilatore fa in modo di utilizzare sempre il codice overridato della classe derivata a cui appartiene l'istanza dell'oggetto, anche se tramite un casting è stato ridotto ad un tipo base; per implementare questo comportamento esiste un certo "costo" a runtime; un codice inserito dal compilatore controlla su un'apposita tabella (v-table) associata all'oggetto qual'è il puntatore alla funzione corretta da richiamare, la risoluzione a differenza delle altre funzioni membro non avviene quindi staticamente ma dinamicamente a runtime.
Se il metodo oltre ad essere virtuale è anche puro, significa che le classi derivate devono implementare tutti i metodi virtuali puri per potere essere istanziabili.
Quindi se hai una funzione che prende una classe base come parametro e sai che questa funzione esegue un metodo virtual sei sicuro che verrà eseguito il codice giusto per quella determinata istanza.
esempio
FUNZIONI MEMBRO COSTANTIcodice:class forma { virtual double Area()=0; }; class rettangolo {.... double Area(){return base * altezza;} }; class quadrato : public rettangolo{ ... double Area(){return base * base ;} }; void stampaArea(forma &f) { cout << f.Area(); //controlla qual'è l'istanza di f ed esegue // il metodo corretto a seconda che sia //rettangolo o quadrato } ....
Per quanto riguarda la definizione di una funzione costante, significa che stai dichiarando che questa funzione non modifica i dati membro.codice:class C { ... char *buffer; char *pCurrentChar; public: char Char(void) const{ return *pCurrentChar;} char Next(void){ return ++pCurrentChar,*pCurrentChar;} ... };
Cio permette al compilatore di lasciarti usare questo metodo anche se il tuo oggetto è dichiarato costante, ad esempio
const C classe;
C.Char(); //legale
C.Next(); //illegale perchè l'oggetto è const e Next non è costante
NB
Queste definizioni che ho dato non sono rigorose tecnicamente, se sei incuriosito prendi un buon libro sul C++ (ce ne sono pochi titoli, se cerchi sul forum trovi diverse discussioni a riguardo).

Rispondi quotando