Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [c++] passaggio parametri con polimorfismo

    volevo sapere se è possibile (e come si fa) il passaggio di parametri ad una funzione sfruttando il polimorfismo. esempio:

    dichiarazione classi:
    classe A;
    classe B estende A;

    dichiarazione funzione:
    funzione(classe* A);

    uso funzione:
    var=new B;
    funzione(B);

    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [c++] passaggio parametri con polimorfismo

    Originariamente inviato da Lotti
    volevo sapere se è possibile (e come si fa) il passaggio di parametri ad una funzione sfruttando il polimorfismo. esempio:

    dichiarazione classi:
    classe A;
    classe B estende A;

    dichiarazione funzione:
    funzione(classe* A);

    uso funzione:
    var=new B;
    funzione(B);
    Concettualmente avviene come hai detto (la forma in cui l'hai scritto però è chiaramente sbagliata).

    Es.:
    codice:
    #include <iostream>
    
    using namespace std;
    
    class A
    {
    public:
        virtual void test ()
        {
            cout << "Sono in test() di A" << endl;
        }
    };
    
    class B : public A
    {
    public:
        void test ()
        {
            cout << "Sono in test() di B" << endl;
        }
    };
    
    void funzione (A &a)
    {
        a.test ();
    }
    
    int main (void)
    {
        B b = B();
    
        funzione (b);
    
        return 0;
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    45
    Ciao, innanzi tutto per l'utilizzo del polimorfismo sfruttiamo ereditarietà ed i puntatori alla classe base.
    In generale sfruttiamo anche quelle funzioni che sono definite come virtuali nella classe base che permettono di creare il seguente motto: "un'interfaccia più metodi"!

    Supponiamo di avere la classe base A

    class A{
    public:
    virtual void funzione(){
    cout<<"\nAll'interno della funzione A!!!!";
    }
    } ;

    creiamo adesso la classe B che eredita da A

    class B : public A{
    public:
    //Possiamo ad esempio ridefinire la funzione virtuale
    void funzione(){
    cout<<"\nSono all'interno di B!!!!";
    }
    };

    Se invece creiamo una classe C ereditata da A senza implementare la funzione virtuale...

    class C : public A{
    };

    Vediamo cosa accade nel main ...

    int main(){
    A oggA;
    A *p;
    B oggB;
    C oggC;

    p=&oggA;
    p->funzione();

    p=&oggB;
    p->funzione; //richiama il metodo ridefinito in B

    p=&oggC;
    p->funzione(); //C non ha ridefinito funzione() dunque viene stampato.....

    system("PAUSE");
    return 0;
    }

    Il polimorfismo ci permette di definire un'interfaccia comune che tutte le classi avranno ma contemporaneamente di definire un nuovo comportamento per le classi specifiche (vedi la classe B)

    alla prossima, ciao!
    ivanet

  4. #4
    scusate ragazzi rileggendo il mio messaggio, probabilmente per l'ora tarda in cui ho postato, mi sono spiegato male tutto quello che avete scritto lo conoscevo già

    entrando nel dettaglio, devo fare un alberoavl estendendo un albero di ricerca binaria che utilizza una classe nodo. per fare l'albero avl ho bisogno di tenere il fattore di bilanciamento di ogni nodo e questo deve essere facilmente accessibile e possibilmente deve lavorare insieme al resto dell'albero.

    ora se io estendo la classe nodo aggiungendo la variabile del bilanciamento, quando vado a utilizzare l'albero che usa tutti puntatori al nodo originale, mi dice sempre che la variabile aggiunta non esiste nel nodo originale. non c'è un modo di fargli fare il controllo a runtime, visto che tanto io gli passo sempre i nuovi nodi?

    grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    45
    Uhm...la variabile la aggiungi quindi nella classe base od ho capito male forse si trova in ciascuna delle sottoclassi?
    ivanet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.