如何重载->操作符?

zhuceooo 2011-08-01 05:04:19
我写了一小段代码,目的是重载class ptr的->操作符,返回他包含的obj对象,并调用其函数。但是编译不通过,我错在哪里?

#include <iostream>
using namespace std;
struct obj{
void f(){cout<<"f()\n";}
};
struct ptr{
obj _o;
obj& operator->(){return _o;}
};
int _tmain(int argc, _TCHAR* argv[]){
ptr p;
p->f();
return 0;
}
...全文
73 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Harper 2011-08-01
  • 打赏
  • 举报
回复
我的编译器通过了.... >_<
赵4老师 2011-08-01
  • 打赏
  • 举报
回复
a->b即(*a).b
ZYLBLCU 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luciferisnotsatan 的回复:]
引用 1 楼 ouyh12345 的回复:

有几个操作符不能重载,->是不是其中之一?

可以重载,但通常不会用这个,至少我在做实际项目中没用过。

struct ptr{
obj _o;
obj* operator->(){return &_o;}
};
[/Quote]

顶~
maoxing63570 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 luciferisnotsatan 的回复:]

stl里的迭代器,会重载这个箭头。
[/Quote]
智能指针也需要吧
luciferisnotsatan 2011-08-01
  • 打赏
  • 举报
回复
stl里的迭代器,会重载这个箭头。
maoxing63570 2011-08-01
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

struct obj
{
void f(){cout<<"f()\n";}
obj* operator->(){return this;}
};

struct ptr
{
obj _o;
obj& operator->(){return _o;}
};
int _tmain(int argc, _TCHAR* argv[]){
ptr p;
p->f();
system("pause");
return 0;
}
ClassDan 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ewook 的回复:]
“->”操作符不能重载吧?
[/Quote]
错了,刚看了下书,可以重载...
ClassDan 2011-08-01
  • 打赏
  • 举报
回复
“->”操作符不能重载吧?
zhuceooo 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]

有几个操作符不能重载,->是不是其中之一?
[/Quote]

No, STL的iterator就有->操作符重载。
luciferisnotsatan 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]

有几个操作符不能重载,->是不是其中之一?
[/Quote]
可以重载,但通常不会用这个,至少我在做实际项目中没用过。

struct ptr{
obj _o;
obj* operator->(){return &_o;}
};
luciferisnotsatan 2011-08-01
  • 打赏
  • 举报
回复
http://www.cppblog.com/custa/archive/2010/08/15/123491.html
ouyh12345 2011-08-01
  • 打赏
  • 举报
回复
有几个操作符不能重载,->是不是其中之一?

64,663

社区成员

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

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