Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    56

    Problema con i costruttori di copia

    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 !


  2. #2
    Scusa ma dove è il costruttore di copia? Nel codice che hai postato è definito solo l'operatore di assegnamento e se fai:
    codice:
    nodo n2 = n;
    viene chiamato il costruttore di copia (che non esistendo) è quello di default. Se invece fai:
    codice:
    nodo n2;
    n2 = n;
    allora viene chiamato l'operatore di copia.
    Per la riga commentata nell'operatore di copia prova a rendere il metodo get_ele const:
    codice:
    int get_ele() const {return ele;}
    l'inline è ridondante perchè la funzione è definita nella definizione della classe e di default sono già inline. se non definisci la funzione const, non puoi chiamarla da un reference const.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.