| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1789 人关注过本帖
标题:[求助]重载
只看楼主 加入收藏
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
为什么非要是友元呢?我只知道有限制不能用友员的,还有不能用成员的吗?

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-11 13:38
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 

能啊,你其实可以用下面的方法:
class stu
{
public:
int x,y;

stu(int m,int n):x(m),y(n){}

};
ostream &operator<<(ostream &os,const stu &s)
{
os<<s.x<<endl<<s.y;return os;
}
我后面想了下,其实你对于<<的重载并不是针对类stu,而是全局的重载,即是说全局的<<操作符只要左边是ostream类型右边是stu类型,那么就会调用你重载的<<,但是这种情况下重载的<<不是stu的函数,不能访问stu的私有成员,所以你可以将其放入stu中声明为stu的友元函数,就变成了
friend ostream& operator<<(ostream &os,const stu &s)


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-05-11 14:20
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
为什么说不是stu的成员函数呢?

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-11 14:40
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 

左操作数是该类类型的对象时才会考虑使用作为类成员的重载操作符(这是c++ primer中的话),而你的使用方式cout<<s;,左边的是cout,而不是s,如果你用s<<,那么你就可以在stu中重在<<,但是参数就是一个了,就如同ostream类中重载的<<一样

[此贴子已经被作者于2006-5-11 15:45:43编辑过]


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-05-11 15:44
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
哦,这样一说就很明白了,谢谢了

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-11 19:16
wlbest
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-5-9
收藏
得分:0 
visual c++6.0不支持将成员函数重载为友员函数,将#include&lt;iostream&gt;改为 &lt;iostream.h&gt;就行了
2006-05-11 23:29
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
今天看到一本书了,上面写了,只能友员函数重载&lt;&lt;和&gt;&gt;运算符

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-12 14:34
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
我有个问题问ajax,既然是成员函数重载运算符时,对象就在op的左边,那么前自增++运算符不能用成员函数重载了?

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-12 14:37
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
不止啊,公共函数也可以,向我上面说的那样用也可以
class stu
{
public:
int x,y;

stu(int m,int n):x(m),y(n){}

};
ostream &operator<<(ostream &os,const stu &s) //这不是友元函数
{
os<<s.x<<endl<<s.y;return os;
}


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-05-12 14:39
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用wfpb在2006-5-12 14:34:00的发言:
今天看到一本书了,上面写了,只能友员函数重载<<和>>运算符

这个问题我知道,顺便回答你了,++是一元操作符,所以++Object相当于Object.operator++()


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-05-12 14:45
快速回复:[求助]重载
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032729 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved