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

    [c++11] Alberi Binari con Classi

    Salve a tutti.

    Ho creato in c++11 un albero binario e i suoi metodi.

    vorrei sapere, se qualcuno mi può aiutare, è corretto creare due classi:
    -Nodo con attributi pubblici
    -Albero con metodi pubblici che richiamano metodi privati e accedono al nodo dal main


    Dovrebbero essere privati gli attributi della classe nodo?
    Dovrei creare una struct invece che una classe nodo?

    Grazie in anticipo.
    Mario


    codice:
    class Nodo
    {
    public:
        string chiave;
        Nodo* sinistro;
        Nodo* destro;
        Nodo* padre;
    };
    
    
    
    
    class Albero
    {
    private:
        Nodo* radice;
    
        Nodo* minimo(Nodo* &a);
        void stampa(const Nodo* a);
    
    public:
      
        Nodo* Minimo(){return minimo(radice);}
        void Stampa(){stampa(radice);}
    };

    ps per renderlo più leggibile ho eliminato quasi tutti i metodi, in albero.
    Ultima modifica di LeleFT; 24-02-2017 a 15:00 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    class e struct sono praticamente la stessa cosa, l'unica differenza e' lo specificatore di visibilita' di default: private in una classe, public in una struct.
    vorrei sapere, se qualcuno mi può aiutare, è corretto creare due classi:
    -Nodo con attributi pubblici
    In linea generale non è sbagliato; semplifica l'implementazione ed evita noiose complicazioni. Diciamo piuttosto che se non strettamente necessario, l'implementazione del nodo dovrebbe stare nel file.cpp piuttosto che nel file.h. In fin dei conti quello che interessa è il payload (in questo caso il campo chiave), per cui i metodi di Albero dovrebbero restituire quello invece che un nodo (che interessa solo l'implementazione, non l'utente).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Grazie per la risposta Shodan.

    Quote Originariamente inviata da shodan Visualizza il messaggio
    class e struct sono praticamente la stessa cosa, l'unica differenza e' lo specificatore di visibilita' di default: private in una classe, public in una struct.
    Se volessi dichiarare gli attributi di Nodo come privati c'è un modo per riuscire a vederli dalla classe albero?

    Quote Originariamente inviata da shodan Visualizza il messaggio
    In linea generale non è sbagliato; semplifica l'implementazione ed evita noiose complicazioni. Diciamo piuttosto che se non strettamente necessario, l'implementazione del nodo dovrebbe stare nel file.cpp piuttosto che nel file.h.
    L'esercizio richiede un file .h per le classi e uno cpp per i metodi, dovrei quindi dichiarare il Nodo* radice in ogni classe nel file .cpp?

    Quote Originariamente inviata da shodan Visualizza il messaggio
    In fin dei conti quello che interessa è il payload (in questo caso il campo chiave), per cui i metodi di Albero dovrebbero restituire quello invece che un nodo (che interessa solo l'implementazione, non l'utente).
    Il metodo
    codice:
    Nodo* minimo(Nodo*&a);
    restituisce un puntatore ma nel main, viene stampato la chiave di quel puntatore, questo perchè il puntatore del massimo lo utilizzo in altri metodi (es. predecessore)

    Grazie ancora.


  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    1) Si, dovresti rendere Albero, friend di Nodo (o prevedere dei metodi get/set che di fatto rendono pubblici i dati privati) .
    codice:
    class Albero; // forward declaration
    class Nodo {
     friend class Albero;
     // roba varia privata
    }
    
    class Albero { // etc }
    Ora puoi accedere ai dati privati di nodo da Albero.

    2) No. Mi riferivo a qualcosa di diverso. Ma dato che stai facendo un esercizio (con delle specifiche) non entro in dettagli fuorvianti dal problema posto (cosa che eventualmente si può fare in futuro quando tutto funziona).

    3) Come sopra.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Grazie mille,

    funziona tutto con friend!


    Ho dovuto modificare, il main :

    esempio il metodo minimo che restituiva un puntatore alla struttura, mettendo gli attributi privati non potevo più entrare nei nodi e stampare la chiave.

    Ho creato quindi un metodo leggi_n (in albero) a cui passo la funzione che restituisce il puntatore minimo e che mi permette di accedere e stampare la chiave.
    codice:
      
     cout<<"Il minimo->"<<albero1.Leggi_n(albero1.Minimo())
    Era più o meno questo quello che intendevi prima?

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Si, più o meno.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Tag per questa discussione

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.