鱼C论坛

 找回密码
 立即注册
查看: 3387|回复: 6

关于重载操作符的一些疑惑!小甲鱼 我不弹你QQ 但是看到抽空帮我解决下疑惑~_~!!

[复制链接]
发表于 2013-1-24 02:41:51 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 心碎的梦 于 2013-1-24 22:00 编辑

好矛盾啊...


Math Math:: operator+(Math &d)  //Math 是一个class名   这个其实没问题
{                                                            

}

中间省略N+1段...... (N<100);

std:: ostream &operator<<(std:: ostream &os,Math f)  // 这是重载<<号 建立的一个表达式  然后问题来了.....
{

}

疑惑就在下面这个重载下放了一个&  而且不可删除  否则报错 ,这2个单单分开放 我不会有疑问。问题是, 在同一个程序中 我同

时写了这2段代码  疑惑出来了  那就是 为什么第一个重载不需要用到& 而且可加可不加 不会影响结果  第2个确必须加& 否则报错


.....论坛的::变成了惊讶图标了?

最佳答案

查看完整内容

1.有的类被设计为不可复制.比如类ostream就不允许被复制. 2.函数的参数如果不使用引用传递,就是值传递,值传递就回复制原来的对象. 3.所以ostream类型作为函数的参数或者返回值都使用引用类型. 4.你的函数签名一看就知道是刚开始学C++的 Math Math:: operator+(Math &d) 加法最好实现为普通函数而不是成函数,即使要实现为成员函数,函数签名也应该为:Math Math:: operator+(const Math &d)const std:: ostream &operator
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-24 02:41:52 | 显示全部楼层
1.有的类被设计为不可复制.比如类ostream就不允许被复制.
2.函数的参数如果不使用引用传递,就是值传递,值传递就回复制原来的对象.
3.所以ostream类型作为函数的参数或者返回值都使用引用类型.
4.你的函数签名一看就知道是刚开始学C++的
Math Math:: operator+(Math &d) 加法最好实现为普通函数而不是成函数,即使要实现为成员函数,函数签名也应该为:Math Math:: operator+(const Math &d)const

std:: ostream &operator<<(std:: ostream &os,Math f) 函数签名应该为
std:: ostream &operator<<(std:: ostream &os,const Math& f);
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-24 10:13:27 | 显示全部楼层
ostream类不能复制或赋值,所以必须用&引用。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-24 13:45:12 | 显示全部楼层
{:1_1:}我先去写一段验证下...看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-24 15:35:51 | 显示全部楼层

还是不了解 std:: ostream &operator 这个&引用号的作用
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-24 18:15:32 | 显示全部楼层
心碎的梦 发表于 2013-1-24 15:35
还是不了解 std:: ostream &operator 这个&引用号的作用

去看C++书籍里函数的参数章节里关于引用参数的内容。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-25 01:33:04 | 显示全部楼层
顿悟了.... 感谢上面不停帮我的  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-8 22:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表