About this code, I'm not understanding because it has been defined this copy constructor

"Anfiteatro(const Anfiteatro &)", I think to avoid to have similar events:

Anfiteatro aa=a2;

Compilator detects copy constructor with this header and it make nothing because function is not defined, but why!?!? What is need?! But I'n not understanding.

this is code:

compito.h

Code:#include <iostream> using namespace std; class Anfiteatro{ struct elemento{ int numMatt; elemento * succ; }; elemento* testa; // mask copy constructor Anfiteatro(const Anfiteatro &); // funzioni di utilita' void elimina(); public: // PRIMA PARTE Anfiteatro(int); bool aggiungiMattonelle(int); void aggiungiColonna(int); friend ostream& operator<<(ostream&, const Anfiteatro&); // SECONDA PARTE bool togliColonna(int); Anfiteatro& operator= (const Anfiteatro&); ~Anfiteatro(){elimina();} };

compito.cpp

Code:#include "compito.h" // funzione di utilita' void Anfiteatro::elimina(){ elemento* p=testa; while(testa!=0){ testa=p->succ; delete p; p=testa; } } // --- PRIMA PARTE --- Anfiteatro::Anfiteatro(int n){ if (n < 0) n=0; testa = 0; elemento* q; for (int i=0; i<n; i++){ q = new elemento; q->numMatt = 0; q->succ = testa; testa = q; } } bool Anfiteatro::aggiungiMattonelle(int k) { if (k < 0) k = 0; elemento* pmin = testa; if (testa == 0) return false; for (elemento* p = testa; p != 0; p = p->succ) if ( p->numMatt < pmin->numMatt ) pmin = p; pmin->numMatt += k; return true; } void Anfiteatro::aggiungiColonna(int k) { if (k <0) k = 0; elemento *p, *q; for (p = testa; p != 0; p = p->succ) q = p; p = new elemento; p->succ = 0; p->numMatt = k; if (testa == 0) testa = p; else q->succ = p; } ostream& operator<<(ostream& os, const Anfiteatro& a){ os<<'<'; for (Anfiteatro::elemento* p=a.testa; p!=0;p=p->succ){ os<<'['<<p->numMatt<<']'; if (p->succ!=0) os<<','; } os<<'>'; return os; } // --- SECONDA PARTE --- bool Anfiteatro::togliColonna(int n) { elemento* p, *q; int cont = 1; if (n <= 0) return false; for (p = testa; p != 0 && cont<n; p = p->succ) { q = p; cont++; } if (p == 0) return false; if (p == testa) testa = p->succ; else q->succ = p->succ; delete p; return true; } Anfiteatro& Anfiteatro::operator=(const Anfiteatro& a){ if ( this != &a){ elimina(); testa=0; elemento *q; for (elemento* p=a.testa; p!=0;p=p->succ){ elemento* r=new elemento; r->numMatt = p->numMatt; r->succ=0; if (testa==0) testa=r; else q->succ=r; q=r; } } return *this; }

main.cpp

thanksCode:#include "compito.h" #include <iostream> using namespace std; int main() { cout << endl << "--- PRIMA PARTE ---" << endl; cout<<"\nChiamata al costruttore"<<endl; Anfiteatro a(4); cout<<a<<endl; cout << "Chiamata alla funzione aggiungiMattonelle()" << endl; a.aggiungiMattonelle(7); cout << a << endl; cout << "Altra chiamata alla funzione aggiungiMattonelle()" << endl; a.aggiungiMattonelle(12); cout << a << endl; cout << "\nChiamata alla funzione aggiungiColonna()" << endl; a.aggiungiColonna(8); cout << a << endl; cout << endl << "--- SECONDA PARTE ---" << endl; cout << endl << "Chiamata alla funzione togliColonna()" << endl; a.togliColonna(1); cout << a << endl; { cout << endl << "Test dell'operatore assegnamento " << endl; Anfiteatro a1(2); cout << "a1 ( *prima* dell'assegnamento ) " << a1 << endl; a1 = a; cout << "a1 ( *dopo* l'assegnamento ) " << a1 << endl; cout << endl; cout << "Test del distruttore (a1 sta per essere distrutto)" << endl; } return 0; }