Metodi get/set e metodo ricorsivo

di il
2 risposte

Metodi get/set e metodo ricorsivo

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:
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:
void albero_RB::converti_albero(nodo_RB* nodo, bool conversione)
{
	if (conversione == false) // converti da BST a RB
	{
		if (nodo!=NULL)
		{
			if (nodo->get_sx() == NULL) // controllo il figlio sinistro
			{
				nodo->set_sx(NIL); // se non c'è, collego quel lato al nodo sentinella
				
			}
			else // c'è il figlio
			{
				converti_albero (nodo->get_sx(), conversione); // scendo a sinistra
			}
			
			if (nodo->get_dx() == NULL)
			{
				nodo->set_dx(NIL);
			}

			else // c'è il figlio
			{
				converti_albero (nodo->get_dx(), conversione); // scendo a sinistra
			}
		}
	}
	
	else if (conversione == true) // converti da RB a BST
	{
		if (nodo!=NIL)
		{
			if (nodo->get_sx() == NIL) // controllo il figlio sinistro
			{
				nodo->set_sx(NULL); // se è il nodo sentinella, sgancio quel lato
				
			}
			else // c'è il figlio
			{
				converti_albero (nodo->get_sx(), conversione); // scendo a sinistra
			}
			
			if (nodo->get_dx() == NIL)
			{
				nodo->set_dx(NULL);
			}

			else // c'è il figlio
			{
				converti_albero (nodo->get_dx(), conversione); // scendo a sinistra
			}
		}
	}
}
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ì:
converti_albero(nodo->get_qualcosa(), get_booleano());
...vero?

Grazie in anticipo!

2 Risposte

  • Re: Metodi get/set e metodo ricorsivo

    No, non mi pare che nel tuo contesto abbia senso definire dei get()/set() per la variabile in questione. Potrebbe avere senso solo se tali metodi fossero virtuali e ridefiniti in una classe derivata, ma utilizzati nella classe base (un caso abbastanza limite comunque).
  • Re: Metodi get/set e metodo ricorsivo

    Grazie mille.

    Forse è stata una domanda anche stupida ma rileggendo il codice vengo assalito da una marea di dubbi a mano a mano che si avvicina la data di consegna.
Devi accedere o registrarti per scrivere nel forum
2 risposte