#include<iostream>
using namespace std;
class Test
{
int *ptr;
public:
Test (int i = 0) { ptr = new int(i); }
void setValue (int i) { *ptr = i; }
void print() { cout << *ptr >> endl; }
Test & operator = (const Test &t);
};
Test & Test::operator = (const Test &t)
{
// Check for self assignment
if(this != &t)
*ptr = *(t.ptr);
return *this;
}
int main()
{
Test t1(5);
Test t2;
t2 = t1;
t1.setValue(10);
t2.print();
return 0;
}