Oppure

Loading
14/05/12 15:26
MagoAntò
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! :)
Ultima modifica effettuata da MagoAntò 14/05/12 15:27
aaa
14/05/12 16:05
RiccardoG97
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.
aaa
15/05/12 10:08
MagoAntò
Perfetto, grazie. :-)
aaa