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
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;
}
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...
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 !