operator<<或>>能像operator+或-一样既可是成员又可是友员吗?
试了下,成员不行,可能是记错了
// complex.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
class complex{
//friend ostream& operator<<(ostream&,const complex&);
public:
ostream& operator<<(ostream&);
complex(int,int);
protected:
private:
int m_re;
int m_im;
};
complex::complex(int re,int im)
{
m_re=re;
m_im=im;
}
ostream& complex::operator<<(ostream& os)
{
cout<<"in member"<<endl;
cout<<m_re<<(m_im<0?"":"+")<<m_im<<"i"<<endl;
return os;
}
//ostream& operator<<(ostream& os,const complex& c)
//{
// cout<<"in friend"<<endl;
// os<<c.m_re<<(c.m_im<0?"":"+")<<c.m_im<<"i"<<endl;
// return os;
//}
int _tmain(int argc, _TCHAR* argv[])
{
complex c(1,-2);
cout<<c;
return 0;
}
问题点数:0、回复次数:12Top
1 楼whyglinux(山青水秀)回复于 2005-06-01 18:59:11 得分 0
可以的。
如果是VC6(对模板支持不好)就要稍微改动一下。在class complex定义前面加上以下两句:
class complex;
ostream& operator<<(ostream&,const complex&);
Top
2 楼jronald(深白色)回复于 2005-06-01 19:36:03 得分 0
不是用友员啊Top
3 楼jronald(深白色)回复于 2005-06-01 19:49:12 得分 0
要这样调用,真可怜
c<<cout;Top
4 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-06-01 19:54:23 得分 0
没有见到过用成员的,
库中的实现,如string重载<<都是友员实现的.
因为<<的参数顺序和其他的不同吧.
第二个参数是this
Top
5 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-06-01 19:56:25 得分 0
二元运算符定义成成员就是.
ostream& complex::operator<<(ostream& os)
this.operator<<(ostream& os);
呵呵,不过没想到c<<cout;
Top
6 楼sunman1982(冥王星)回复于 2005-06-01 20:00:33 得分 0
+ - * /要定义成友元,否则很可能就是你程序的大bugTop
7 楼wzjall(风)回复于 2005-06-01 20:52:14 得分 0
推荐你看看efficentc++这本书,很不错,里面有详细介绍.什么时候用友员,什么时候用成员函数Top
8 楼mostideal(三甲)回复于 2005-06-02 00:24:28 得分 0
markTop
9 楼foochow(无聊,灌水......)回复于 2005-06-02 00:28:03 得分 0
operator<<或>>这两个应该不能定义成友元吧~~~我也不清楚,没有想过这个问题,等高人-_-Top
10 楼zdy_8212(zdy_8212)回复于 2005-06-02 02:59:09 得分 0
感觉还是可以定义成友元,因为流就混合体。没有试过Top
11 楼Coffee_62(62度的咖啡)回复于 2005-06-02 05:23:59 得分 0
用友元Top
12 楼hj008(catch jjhou)回复于 2005-06-02 17:03:54 得分 0
我觉得也要用友员.要是成员函数如果在继承关系中就会有些不确定性.
个人的看法,可能不对.Top
相关问题
- 这两个程序哪里不同了,可是结果为什么不一样
- private的数据成员和成员函数的参数一样怎么区分啊?
- 我照着书学Jbuilder6,可是一样的语句就是有错,那位可以帮我看看
- GetDIBits在2000下没问题,可是在98下就返回零.条件是一样的,为什么?
- 没有什么控件可是实现文字和图象并存。想Word一样
- 救命,我的FRAMEWORK坏了,说我安装有问题,可是我重新装了,还是一样
- form验证问题。我FormsAuthentication.SignOut()了,回到了登录页面。可是回退一样可以登录系统。
- COM进程类组件中,在一个接口中加了一个方法,成员变量类型CString,可是不行,那该用什么?
- 把一个函数声明为一个类的友员,可是在函数中用到类的私有成员变量时会出错,怎么回事?
- 关于成员operator重载 默认转换的问题




