06/01/12 17:18
McFly
Salve ragazzi, ho un piccolo problemino nell'applicazione del concetto di polimorfismo.
Faccio un breve esempio generico per farvi capire qual'è il problema, senza soffermarmi sui dettagli e le implementazioni dei metodi delle rispettive classi.
Fin qui nessun problema.... ora creo una classe B che eredita da A
Qui arrivano i problemi, in quanto in questa classe mi servirebbe il metodo2() della classe A(che applicando l'ereditarietà ho a disposizione tranquillamente)
che ha al suo interno il metodo1() che oltre che fare (quel qualcosa che fa nella classe A, ho bisogno di aggiungere altre istruzioni).
quindi
Ora mi chiedo innanzitutto se per realizzare ciò, è corretto utilizzare il polimorfismo, ed in caso affermativo, è sufficiente dichiarare metodo1 nella classe A con la keyword virtual e poi ridefinire lo stesso metodo1 nella classe B derivata con le aggiunte che mi servono? A questo punto poi, potrei utilizzare tranquillamente metodo2 mediante classe B ereditato da classe A ed il compilatore automaticamente andrà a stabilire quale metodo1 utilizzare al suo interno in base alla classe che lo chiama? (scusate il gioco di parole )
Faccio un breve esempio generico per farvi capire qual'è il problema, senza soffermarmi sui dettagli e le implementazioni dei metodi delle rispettive classi.
class A { public: void metodo1(); void metodo2(); }; void A::metodo1() { // fa qualcosa } void A::metodo2(); { // fa qualcosa metodo1(); // usa il metodo 1 // fa qualcos'altro ancora }
Fin qui nessun problema.... ora creo una classe B che eredita da A
class B : public A { // definizione classe B };
Qui arrivano i problemi, in quanto in questa classe mi servirebbe il metodo2() della classe A(che applicando l'ereditarietà ho a disposizione tranquillamente)
che ha al suo interno il metodo1() che oltre che fare (quel qualcosa che fa nella classe A, ho bisogno di aggiungere altre istruzioni).
quindi
void metodo1() { // fa quello che fa nella classe A // aggiunta istruzioni da fare solo nella classe B }
Ora mi chiedo innanzitutto se per realizzare ciò, è corretto utilizzare il polimorfismo, ed in caso affermativo, è sufficiente dichiarare metodo1 nella classe A con la keyword virtual e poi ridefinire lo stesso metodo1 nella classe B derivata con le aggiunte che mi servono? A questo punto poi, potrei utilizzare tranquillamente metodo2 mediante classe B ereditato da classe A ed il compilatore automaticamente andrà a stabilire quale metodo1 utilizzare al suo interno in base alla classe che lo chiama? (scusate il gioco di parole )
Ultima modifica effettuata da McFly 06/01/12 17:22
aaa