学习C++时,对于C++运算符重载中,-> 的重载理解不是很明白,望高手指点一二。代码如下
class Creator
{
public:
Creator() { i=1; }
void test() { printf("test---\n"); }
public:
int i;
};
template <class T> class SOCmnPointer
{
public:
// constructors
SOCmnPointer(void) { p = NULL;printf( "构造函数1\n"); }
SOCmnPointer(T* p_) { p = p_;printf( "构造函数2\n");}
T* operator->() { return p; }
public:
T* p;
};
////////////
Creator * get()
{
Creator *pointer;
pointer=new Creator();
return pointer;
}
//////// main
int main(int argc, _TCHAR* argv[])
{
SOCmnPointer<Creator> creator;
creator = get();
creator->test();//creator.p->test();
return 0;
}
对于上面的代码,模板类template <class T> class SOCmnPointer的声明中定义了一个“->”的重载
按照我自己的理解 creator->test() 中的“creator->”先调用重载,返回一个SOCmnPointer*(即T*)指针,再由这个指针去调用成员函数 test() ,但用于语句中的“->”已经用过了,所以相当于 new Creator()test() ,中间少了个“->”,无法指向啊,怎么回事呀???