PDA

Visualizza la versione completa : [C++] Come passare i dati da una classe all'altra?


lion2684
05-04-2007, 18:48
ciao a tutti..
Il mio problema è questo: in una classe chiamata Cluster devo chiamare un metodo (getAvailability() )della classe Nodo ( il metodo nella classe nodo si chiama allo stesso modo getAvailability() ).
Nella Classe cluster devo salvare un array con tutti i risultati della chiamata del metodo della classe nodo.
Gli oggetti nodo sono salvati in un array cluster_node[i];
quindi procedo cosi:
---Nella Classe Cluster---
int ClusterNodi::getAvailability()
{
for (int t=0;t<n_nodi;t++){
cout << cluster_nodes[t]-> getAvailability() <<endl;

return cluster_nodes[t]-> getAvailability();
}

}
---Nella Classe Nodo---
int Nodo::getAvailability()
{

return availability;

}
dove availability è un membro della classe...e viene settato in un altro metodo:
void Nodo::setAvailability(int _availability)
{

availability=_availability;
}

....Tuttavia i dati nell'array cluster_node[i] non risultano essere quelli impostati? :bhò:
Qualcuno puo' aiutarmi??grazie!! :ciauz:

shodan
05-04-2007, 20:02
int ClusterNodi::getAvailability() {
for (int t=0;t<n_nodi;t++) {
cout << cluster_nodes[t]-> getAvailability() <<endl;

return cluster_nodes[t]-> getAvailability();
}

}


Così ritorni sempre cluster_nodes[0]-> getAvailability(); è voluto?

lion2684
05-04-2007, 20:05
no...!
vorrei cluster_node[0] poi cluster_node[1], cluster_node[2]...ecc

shodan
05-04-2007, 20:23
Allora non puoi mettere il ciclo dentro la funzione.
O indicizzi la ClusterNodi::getAvailability() facendola diventare
ClusterNodi::getAvailability(int index)
oppure ritorni l'intero array e lo analizzi fuori.
Personalmente ritornerei un opportuno vector in questo caso.


Potresti anche fare un overloading dell'operatore [] su ClusterNodi

int ClusterNodi::operator[](int index) {
return cluster_nodes[index]-> getAvailability()
}

lion2684
05-04-2007, 20:54
c'è anche una funzione setAvailability()...forse nemmeno questa è giusta?

void ClusterNodi::setAvailability()
{

for (int t=0;t<n_nodi;t++)

//esempio di disponibilità;
cluster_nodes[0]-> setAvailability(5);
}

shodan
05-04-2007, 21:22
Originariamente inviato da lion2684
c'è anche una funzione setAvailability()...forse nemmeno questa è giusta?


void ClusterNodi::setAvailability() {
for (int t=0;t<n_nodi;t++)
//esempio di disponibilità;
cluster_nodes[0]-> setAvailability(5);
}



A vederla così no. Fai un ciclo per inizializzare 5 volte cluster_nodes[0] a 5 il che non ha senso.



void ClusterNodi::setAvailability() {
for (int t=0;t<n_nodi;t++)
//esempio di disponibilità;
cluster_nodes[t]-> setAvailability(5);
}

Così ha un senso, anche se non credo che debbano valere tutti 5 :) la versione corretta sarebbe :


void ClusterNodi::setAvailability(int pos, int avail) {
cluster_nodes[pos]-> setAvailability(avail);
}

lion2684
05-04-2007, 21:37
grazie mille!
volendo usare due volte operato è possibile?
perche oltre a:
int ClusterNodi::operator[](int index)
{
return cluster_nodes[index]-> getAvailability() ;

}


puo' andare cosi':

unsigned int ClusterNodi::getSerials(int index)
{

return cluster_nodes[index]-> getSerial() ;

}


...deve tirare fuori il seriale dell'oggetto di indice index...

shodan
05-04-2007, 22:21
Si. Ovviamente se vuoi evitare di sforare l'array dovrai mettere un controllo sull'indice.

Tieni presente che se all'interno di un ciclo metti un return la funzione termina immediatamente (riferito ai primi listati)

lion2684
05-04-2007, 22:30
ah,ok! grazie ancora!

Loading