CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

+,-等运算符重载怎么用友元实现

楼主Si1412(覃希)2003-12-02 19:43:51 在 C/C++ / C++ 语言 提问

书上说   +,-,*,/   等双目运算符的重载最好定义为类的友元.我在自定义的complex类中试过可以,但在多项式类中却不行.  
  凡有friend   CPol&   operator+(const   CPol&p1,const   CPol&   p2)   之处都出现Internal   Compile   Error.  
  而且我定义的  
  friend   ostream   &operator<<(ostream   &os,   const   CPol   &p)也无法访问p的私有成员  
  问题点数:0、回复次数:3Top

1 楼zhouqingyuan(浪帆)回复于 2003-12-02 20:14:15 得分 0

找一本C++书,看看书上的例子就知道你哪里出问题了。Top

2 楼smalltalk(老徐)回复于 2003-12-02 23:07:38 得分 0

只有在类定义里面需要加friend   说明。在类外该函数还要定义一次。但前面不要加friend就不会错了。Top

3 楼plainsong(短歌)()回复于 2003-12-03 00:50:28 得分 0

>   书上说   +,-,*,/   等双目运算符的重载最好定义为类的友元.  
   
  事实上这种说法是不正确的,不管它是什么书上说的。  
  无论什么情况,友元都是能不用就不用。应该用成员来完成。  
  比如定义加法运算,你可以定义一个Add成员函数,它实现把自身加上另一个对象的功能;然后定义全局的+=操作符,调用Add实现;再全局定义+操作符,用+=实现。  
  当然你也可以把+=和+操作符都定义为成员操作符,但我一般习惯于在类定义中不定义操作符,只定义全局操作符。  
  同样,输入/输出操作符也可以这样作——它们都无法定义为你的类的成员,因为第一个参数是istream/ostream。为你的类定义input/output成员函数,实现输入/输出操作;然后定义全局操作符,调用input/output实现功能。Top

相关问题

  • 如何实现重载运算符连==
  • 重载运算符
  • 请教各位,如何实现前缀运算符的重载
  • 如何实现两个运算符的重载函数
  • Java 能否实现类似于重载运算符的功能?
  • 如何实现 byte[] 运算符+ 重载,就像string 一样?
  • 求string类的重载小于运算符<的实现代码
  • 询问运算符重载,使用友元还是成员函数?
  • 怎样重载(),[],=运算符
  • 如何重载+运算符?

关键词

  • 操作符
  • 定义
  • 运算符
  • cpol
  • 全局
  • 实现
  • 类
  • 成员
  • 书上说

得分解答快速导航

  • 帖主:Si1412

相关链接

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

广告也精彩

反馈

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