//重载指针运算符*,->
#include <iostream>
using namespace std;
template<class T>
class MyPtr
{
private:
T * m_ptr;
public:
MyPtr(T* ptr = NULL) :m_ptr(ptr){}
T& operator*()const
{
return *m_ptr;
}
//重载箭头
T * operator->()
{
return m_ptr;
}
};
struct Alienware
{
void Show()
{
cout << "i am Alienware" << endl;
}
};
int main()
{
MyPtr<Alienware> m(new Alienware());
m->Show();
m.operator->()->Show();//m.operator->()返回指针
m.operator*().Show();//m.operator*()返回对象
(*m).Show();
return 0;
}