CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

c++运算符重载单的问题

楼主loyalzu(Pointer)2003-11-04 18:42:29 在 C/C++ / C++ 语言 提问

如下的一个函数有什么问题吗?  
  ostream&   operator   <<   (ostream&   out,const   T&   a)   {   out<<a.m_nNumber;   return   out;} 问题点数:0、回复次数:8Top

1 楼dot99(又来混CSDN来了)回复于 2003-11-04 18:48:00 得分 0

如果a.m_nNumber是public,就没问题~  
  如果是重载template的<<,那最好在template里面重栽Top

2 楼loyalzu(Pointer)回复于 2003-11-04 18:54:14 得分 0

不是的T是我定义的一个类名  
  class   T  
  {  
  public:  
  int   Get()   const   {   return     m_nNumber;}  
  void   Set(int   nNewVal)   {   m_nNumber   =   nNewVal;}  
  T&   operator   =(const   T&   x)   {   m_nNumber   =   x.m_nNumber;return   *this;}  
  ostream&   operator   <<   (ostream&   out,const   T&   a)   {   out<<a.m_nNumber;   return   out;}  
  T(int   m)   {   m_nNumber   =     m;}  
  protected:  
  int   m_nNumber;  
  };  
  谢谢了Top

3 楼loyalzu(Pointer)回复于 2003-11-04 18:56:08 得分 0

C:\er.cpp(10)   :   error   C2804:   binary   'operator   <<'   has   too   many   parameters  
  是这个问题,不知道是什么原因  
  Top

4 楼tuxw(醉书生)回复于 2003-11-04 19:01:22 得分 0

m_nNumber是保护的,最好将<<重载为友员函数Top

5 楼plainsong(短歌)()回复于 2003-11-04 19:02:26 得分 0

cout   <<   a;  
  要重载operator   <<只能有两种方法,一是做为ostream的成员(因为第一个参数是ostream),一是做为全局操作符。  
  做为成员已经不可能,因为你不能改写ostream;全局实现也有问题:当你需要访问T的非公开成员时。  
   
  很多人都用友元解决,不过更好的方法是:  
   
  class   T  
  {  
  ...  
  public:  
      ostream&   output(ostream&   ostrm)  
      {  
          return   ostrm   <<   m_nNumber;  
      }  
  ...  
  };  
  ostream&   operator   <<   (ostream&   out,const   T&   a)   {   return   a.output(out);}  
   
  Top

6 楼plainsong(短歌)()回复于 2003-11-04 19:05:10 得分 0

原来如此。  
  把operator   <<定义为全局的就行了。  
  二元操作符重载时有两种形式:  
  1:定义为左操作数类型的成员,参数只有一个,类型为右操作数  
  2:定义为全局操作符,参数有两个,第一个类型是左操作数,第二个类型是右操作数。Top

7 楼dot99(又来混CSDN来了)回复于 2003-11-04 20:40:21 得分 0

转过来一看,楼上就回答完了~~~  
  plainsong(短歌)是对的~Top

8 楼rushinger(阮祥哥)回复于 2003-11-04 20:40:26 得分 0

兰大的。Top

相关问题

  • 在Dev-C++重载运算符问题
  • 重载运算符
  • 关于C++中运算符重载的问题
  • Delphi能象C++一样重载运算符吗?
  • String的+是不是像c++一样重载运算符?
  • 关于C++运算符重载的问题????
  • c++运算符重载问题,调试出错
  • C++运算符重载的一个问题
  • C++运算符重载的一个问题
  • 关于C++中类的运算符重载的问题

关键词

  • 问题

得分解答快速导航

  • 帖主:loyalzu

相关链接

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

广告也精彩

反馈

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