Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Metodi get/set e metodo ricorsivo
Forum - C/C++ - Metodi get/set e metodo ricorsivo

Avatar
MagoAntò (Normal User)
Rookie


Messaggi: 42
Iscritto: 07/02/2009

Segnala al moderatore
Postato alle 17:26
Lunedì, 14/05/2012
Ciao a tutti.

Avrei bisogno di un consiglio: se in una classe ho un attributo booleano dichiarato private che, per tutta la durata del programma, dovrà essere acceduto solamente dalla classe stessa (mai dall'esterno, quindi) credo non abbia senso dichiarare dei metodi get e set, giusto? Ci si può accedere direttamente così, per esempio:

Codice sorgente - presumibilmente Plain Text

  1. booleano = true;



Altra domanda: per delle specifiche di un progetto sul quale sto lavorando, dovrei convertire "dinamicamente" un albero binario da rosso-nero a binario di ricerca e viceversa. L'idea che avevo avuto è quella di visitare l'albero e di settare a NULL o al nodo sentinella i campi puntatori ai figli sinistro e destro dei nodi senza figli. Questo è il metodo che ho scritto:

Codice sorgente - presumibilmente C++

  1. void albero_RB::converti_albero(nodo_RB* nodo, bool conversione)
  2. {
  3.         if (conversione == false) // converti da BST a RB
  4.         {
  5.                 if (nodo!=NULL)
  6.                 {
  7.                         if (nodo->get_sx() == NULL) // controllo il figlio sinistro
  8.                         {
  9.                                 nodo->set_sx(NIL); // se non c'è, collego quel lato al nodo sentinella
  10.                                
  11.                         }
  12.                         else // c'è il figlio
  13.                         {
  14.                                 converti_albero (nodo->get_sx(), conversione); // scendo a sinistra
  15.                         }
  16.                        
  17.                         if (nodo->get_dx() == NULL)
  18.                         {
  19.                                 nodo->set_dx(NIL);
  20.                         }
  21.  
  22.                         else // c'è il figlio
  23.                         {
  24.                                 converti_albero (nodo->get_dx(), conversione); // scendo a sinistra
  25.                         }
  26.                 }
  27.         }
  28.        
  29.         else if (conversione == true) // converti da RB a BST
  30.         {
  31.                 if (nodo!=NIL)
  32.                 {
  33.                         if (nodo->get_sx() == NIL) // controllo il figlio sinistro
  34.                         {
  35.                                 nodo->set_sx(NULL); // se è il nodo sentinella, sgancio quel lato
  36.                                
  37.                         }
  38.                         else // c'è il figlio
  39.                         {
  40.                                 converti_albero (nodo->get_sx(), conversione); // scendo a sinistra
  41.                         }
  42.                        
  43.                         if (nodo->get_dx() == NIL)
  44.                         {
  45.                                 nodo->set_dx(NULL);
  46.                         }
  47.  
  48.                         else // c'è il figlio
  49.                         {
  50.                                 converti_albero (nodo->get_dx(), conversione); // scendo a sinistra
  51.                         }
  52.                 }
  53.         }
  54. }



Può essere scritto meglio o in maniera più sintetica? Tornando alla prima domanda, all'atto della chiamata di questo metodo, non ha senso scrivere così:

Codice sorgente - presumibilmente Plain Text

  1. converti_albero(nodo->get_qualcosa(), get_booleano());



...vero?

Grazie in anticipo! :)

Ultima modifica effettuata da MagoAntò il 14/05/2012 alle 17:27
PM Quote
Avatar
RiccardoG97 (Member)
Pro


Messaggi: 133
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 18:05
Lunedì, 14/05/2012
In risposta alla prima domanda:
Se il dato membro lo vuoi modificare solo all'interno della classe allora è inutile creare funzioni set e get che lo modifichino. Se invece vuoi cambiarne il valore fuori dall'ambito di visibilità bisogna usarle.

PM Quote
Avatar
MagoAntò (Normal User)
Rookie


Messaggi: 42
Iscritto: 07/02/2009

Segnala al moderatore
Postato alle 12:08
Martedì, 15/05/2012
Perfetto, grazie. :-)

PM Quote