//class HasPtr
class HasPtr
{
public:
//default constructor
HasPtr():p(new int) {}
//constructor
HasPtr(int * i):p(i) {}
//copy control
HasPtr(const HasPtr & m) { *p = *(m.p) ;}
int operator* () { return *p;}
int * operator->() { return p;}
private:
int * p;
};
<pre name="code" class="cpp"> int t = 3;
HasPtr has1(&t);
std::cout<<*has1<<std::endl;
std::cout<<*( has1.operator->() )<<std::endl;