#include <iostream>

class A
{

char * stringa;
public:
A(int size)
{

cout << endl <<"costruttore 1" << endl;
stringa = new char [size+1];

}
// A( const A & from) {
// stringa = from.stringa;
// }

void set (char * s)
{

strcpy(stringa,s);

}

void print ()
{

cout << stringa << " -- " << strlen(stringa) << endl;

}

};

void f(A aa)
{

cout << endl << "f:" << endl;
aa.print();
aa.set("pippo");
aa.print();

}

void main ()
{

A a0(80);
a0.set("paperino");
cout << endl << "main1:" << endl;
a0.print();
f(a0);
cout << endl << "main2:" << endl;
a0.print();

/*Il valore dell'ultima stampa a video è pari alla stringa "pippo"; infatti la copia dell'oggetto (quando viene chiamata "f(a0)") viene eseguita byteXbyte quindi un'eventuale modifica della stringa dell'oggetto "aa" comporta la modifica anche della stringa dell'oggetto "a0". */

}