CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

operator<<或>>能像operator+或-一样既可是成员又可是友员吗?

楼主jronald(深白色)2005-06-01 18:44:34 在 C/C++ / C++ 语言 提问

试了下,成员不行,可能是记错了  
  //   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重载 默认转换的问题

关键词

  • operator
  • 成员
  • complex
  • 定义成友元

得分解答快速导航

  • 帖主:jronald

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo