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!