Ciao, sto cimentandomi con i costruttori di copia.. x fare un test ho scritto un po' di codice ma non riesco a capire alcuni dettagli...
posto il codice che è di diversi files ma ho preso i pezzi critici
il problema è ke nella versione che ho postato è come se non venisse usato l'overload dell'operatore di assegnamento e da output si capisce ke viene usato il costruttore di copia implicito che fa il suo dovere, se invece scommento le 2 righe commentate e commento "nodo n2 = n" tutto avviene come mi aspettavo, viene caricato il costruttore di copia, e come oh deciso (x testare) scrive 10 nella copia...codice:#include <conio.h> #include <iostream> using namespace std; class nodo { private: int ele; public: nodo *next; nodo *prev; inline int get_ele(){return ele;} explicit nodo(int e):ele(e) {}; nodo & operator= (const nodo &n) { //ele = n->get_ele(); ele = 10; next = NULL; prev = NULL; return *this; } }; int main(int argc, char *argv[]) { int e; cout << "inserisci elemento: \n"; cin >> e; nodo n(e); cout << "il nuovo nodo n contiene: " << n.get_ele() << endl; cout << " mo costruiamo la copia \n"; nodo n2 = n; //nodo n2(1); //n2 = n; cout << "la copia n2 di nodo n contiene: " << n2.get_ele() << endl; getch(); return EXIT_SUCCESS; }
perché nel primo caso ciò non avviene ??
e seconda domanda..
nel costruttore di copia ho commentato ele = n->get_ele(); che sarebbe la versione finale.. ma il compilatore nn me la passa proprio... n è passato per rifemento.. non capisco xkè non accetta la ->
grazie a chiunque mi risponda !
![]()

Rispondi quotando
