新手急问:C++运算符重载问题

fengmang_0451 2008-02-22 02:01:19
学习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() ,中间少了个“->”,无法指向啊,怎么回事呀???
...全文
105 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
RichieChyi 2008-02-22
  • 打赏
  • 举报
回复
Understand! Thanks Paliruya !:)
Paliruya 2008-02-22
  • 打赏
  • 举报
回复
A new problem: [ creator = get(); ] Why does this sentence call SOCmnPointer(T* p_);?Is it only an assignment?

And if overloading operator=(),just like:
SOCmnPointer& operator=(T* p_) { p = p_; cout < < "operator=()" < < endl; return *this; }

it will only call operator=(), not SOCmnPointer(T* p_); why?

//请察看explicit的说明
Paliruya 2008-02-22
  • 打赏
  • 举报
回复
你的理解是对的,但是不知道你的疑问是什么
RichieChyi 2008-02-22
  • 打赏
  • 举报
回复
A new problem: [ creator = get(); ] Why does this sentence call SOCmnPointer(T* p_);?Is it only an assignment?

And if overloading operator=(),just like:
SOCmnPointer& operator=(T* p_) { p = p_; cout << "operator=()" << endl; return *this; }

it will only call operator=(), not SOCmnPointer(T* p_); why?
fengmang_0451 2008-02-22
  • 打赏
  • 举报
回复
healer_kx :
那应该怎么理解呀?

bluejoe2000 :
creator是一个SOCmnPointer 对象,但它不是指针,所以重载SOCmnPointer类的运算符“->”
即 T* operator->() { return p; } 返回SOCmnPointer*指针p呀,我是这么理解的,不知对不对。
RichieChyi 2008-02-22
  • 打赏
  • 举报
回复
creator->test();
||
creator.operator ->()->test();
白乔 2008-02-22
  • 打赏
  • 举报
回复
“creator-> ”先调用重载,返回一个SOCmnPointer*(即T*)指针

这句话不对吧
creator是一个SOCmnPointer 对象
healer_kx 2008-02-22
  • 打赏
  • 举报
回复
哥们,你不能这么理解问题,这不是玩文本替换游戏啊。

64,849

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧