abestos
02-05-2010, 14:45
Sto definendo un grafo composto dalle seguenti classi:
classe Grafo con i seguenti attributi: (ho tralasciato gli attributi semplici come gli indici)
Nodo** nodi; // array di puntatori ai vari nodi del grafo
Arco** archi; // array di puntatori ai vari archi del grafo
La classe Nodo ha i seguenti attributi:
Arco** archiVicini; // array di puntatori agli archi che escono dal nodo
Ora non so proprio come definire il copyconstructor della classe Grafo e non so se è necessario prima definire un copyConstructor per la classe Nodo e Arco.
Grafo(const Grafo &other) {
index = other.getIndex();
index2 = other.getIndex2();
capacita1 = other.getCapacita1();
capacita2 = other.getCapacita2();
nodi= new Nodo*[capacita1];
archi= new Arco*[capacita2];
for (int i=0; i<index; i++){
nodi[i] = other.nodi[i];
}
for(int i=0; i<index2; i++){
archi[i]=other.archi[i];
}
}
Il problema è che così i due grafi condividono nodi e archi visto che copio semplicemente il puntatore. Esiste un modo per fare una copia di nodi e archi senza definire un copyconstructor (che non riesco a definire visto che anche queste classi hanno strutture dati complesse) di Nodo e Arco?
Purtroppo non posso usare la funzione aggiungiNodo perchè risalire ai parent dei vari nodi per poterli aggiungere sarebbe molto complesso e oneroso.
classe Grafo con i seguenti attributi: (ho tralasciato gli attributi semplici come gli indici)
Nodo** nodi; // array di puntatori ai vari nodi del grafo
Arco** archi; // array di puntatori ai vari archi del grafo
La classe Nodo ha i seguenti attributi:
Arco** archiVicini; // array di puntatori agli archi che escono dal nodo
Ora non so proprio come definire il copyconstructor della classe Grafo e non so se è necessario prima definire un copyConstructor per la classe Nodo e Arco.
Grafo(const Grafo &other) {
index = other.getIndex();
index2 = other.getIndex2();
capacita1 = other.getCapacita1();
capacita2 = other.getCapacita2();
nodi= new Nodo*[capacita1];
archi= new Arco*[capacita2];
for (int i=0; i<index; i++){
nodi[i] = other.nodi[i];
}
for(int i=0; i<index2; i++){
archi[i]=other.archi[i];
}
}
Il problema è che così i due grafi condividono nodi e archi visto che copio semplicemente il puntatore. Esiste un modo per fare una copia di nodi e archi senza definire un copyconstructor (che non riesco a definire visto che anche queste classi hanno strutture dati complesse) di Nodo e Arco?
Purtroppo non posso usare la funzione aggiungiNodo perchè risalire ai parent dei vari nodi per poterli aggiungere sarebbe molto complesso e oneroso.