• Non ci sono risultati.

C++ - Polimorfismo PROGRAMMIAMO

N/A
N/A
Protected

Academic year: 2021

Condividi "C++ - Polimorfismo PROGRAMMIAMO"

Copied!
2
0
0

Testo completo

(1)

Polimorfismo

Con polimorfismo in generale si intende la capacità di qualcosa di assumere forme diverse. Nella

programmazione ad oggetti per polimorfismo si intende la possibilità di ridefinire (con lo stesso nome) i metodi ereditati da una classe base.

Il polimorfismo è dunque strettamente legato al concetto di ereditarietà e può assumere due forme:

overloading: quando il metodo della classe derivata differisce da quello della classe base per il tipo e/o il numero di parametri;

overriding: quando il metodo della classe derivata sovrascrive il metodo della classe base mantenendo inalterato il numero e il tipo di parametri.

Overloading

Abbiamo già incontrato più volte il concetto di overloading. Supponiamo per esempio di avere una classe ellisse così definita:

class ellisse {

protected: double asseMag, asseMin;

public:

void set(double a, double b) {asseMag =a; asseMin = b;}

double area();

double perimetro();

};

asseMag e asseMin rappresentano rispettivamente l'asse maggiore e l'asse minore dell'ellisse.

Supponiamo ora di voler derivare dalla precedente una classe cerchio:

class cerchio : public ellisse { public:

void set(double a) {asseMag =a; asseMin =a;}

} ;

Si noti che il metodo set è stato riscritto usando un solo parametro (il cerchio è infatti un caso particolare di ellisse con i due assi uguali).

Si tratta di un caso di overloading: il compilatore riconosce quale metodo invocare in base al numero dei parametri passati. Si noti che il metodo set della classe base ellisse continua a essere disponibile anche per la classe derivata cerchio.

Overriding

PROGRAMMIAMO

C++ - Polimorfismo

C++ |Home |Contatti

Programmiamo http://www.programmiamo.altervista.org/C/oop/o...

1 di 2 16/12/2014 09:02

(2)

Nell'overriding invece la classe derivata riscrive identicamente un metodo della classe base, con gli stessi parametri. Questo accadrebbe per esempio, nel caso precedente, se ridefinissimo il metodo set nel seguente modo:

class cerchio : public ellisse { public:

void set(double a, double b) {asseMag =a; asseMin =a;}

} ;

Si noti che il parametro b viene semplicemente ignorato in questo caso. A parte l'opportunità o meno di questa scelta di programmazione, è interessante notare che con l'overriding il metodo della classe base non risulta più disponibile nella classe derivata in quanto viene mascherato dall'identico metodo della classe derivata.

precedente - successiva Sito realizzato in base al template offerto da

http://www.graphixmania.it

Segui

Segui @ElePrograMania@ElePrograMania

Programmiamo http://www.programmiamo.altervista.org/C/oop/o...

2 di 2 16/12/2014 09:02

Riferimenti

Documenti correlati

Salvo il caso in cui fosse (Dw) = 0 , l'ultimo termine al secondo membro della [3] tende a zero più rapidamente dell'altro termine che vi compare; quest'ultimo (chiamato anche

Poi dovrebbe venire la conoscenza: se dobbiamo interagire con altre culture, dobbiamo imparare come sono queste culture, quali sono i loro simboli, i loro eroi, i loro riti

I metodi della classe Math (ad esempio Math.sqrt) sono quindi statici e invocano Math, non uno specifico oggetto.... Tipi

• Quando un metodo viene ridefinito in una classe derivata, il nuo- vo metodo pu`o lanciare solo le eccezioni dichiarate nel metodo della classe base.. • Tutte le eccezioni

Tale funzione viene detta funzione derivata

Utilizzando le proprietà delle operazioni (distributiva, associativa, commutativa...) il polinomio può essere espresso come somma di prodotti di un numero per alcune delle

La velocità istantanea indica la “rapidità” con cui varia lo spazio al variare del tempo e coincide con il coefficiente angolare della retta tangente nel punto considerato.

Ciò non comporta nessun problema, poiché il compilatore è in grado di stabilire quale funzione deve usare in base al tipo dell'argomento passato: se viene passato un valore double