鱼C论坛

 找回密码
 立即注册
查看: 2345|回复: 10

c++运算符重载问题又可能是优先级问题

[复制链接]
发表于 2016-8-10 08:34:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 小剑剑 于 2016-8-10 08:37 编辑

一共三个文件很简单的代码

文件3的其中一句有错但不理解

开始我以为是优先级问题,但b<<(a<<cout);没有出错,证明优先级没问题,那为什么多了一个c就出错了呢??

文件1
  1. #include <string>
  2. #include <iostream>
  3. #ifndef prog_h
  4. #define prog_h
  5. namespace prog
  6. {
  7.     using namespace std;
  8.     class Prog
  9.     {
  10.     private:
  11.         string name;
  12.         int cp;
  13.     public:
  14.       Prog();
  15.       Prog(const int ,string const na="Ploga");
  16.       void changep(const int);
  17.       ostream& operator <<(ostream &os)const
  18.       {
  19.           os<<name<<endl;
  20.           os<<cp<<endl;
  21.           return os;
  22.       }
  23.     };
  24. }
  25. #endif // prog_h
复制代码



文件2
  1. #include "prog.h"
  2. using namespace prog;

  3. Prog::Prog()
  4. {
  5.     name="Plorga";
  6.     cp=50;
  7. }
  8. Prog::Prog(const int c,const string na)

  9. {
  10.     cp=c;
  11.     if (na.size()>19)
  12.     {
  13.             cout<<"name is too long "<<endl;
  14.             return ;
  15.     }
  16.     name=na;
  17. }

  18. void Prog::changep(const int c)
  19. {
  20.     cp=c;
  21. }
复制代码



文件3

  1. #include <iostream>
  2. #include "prog.h"
  3. using namespace prog;

  4. int main()
  5. {
  6.     Prog a(1),b(2,"123"),c();
  7.     (b<<(a<<cout));


  8. c<<(b<<(a<<cout));//这里会出错这里会出错这里会出错


  9. }
复制代码

求解,另外代码有哪里不够好的,大家请指出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-10 09:35:05 | 显示全部楼层
本帖最后由 DarkSE 于 2016-8-10 09:38 编辑

错在你那个c,不要加括号
一开始看到<<cout,也是一脸懵逼, 很少看到这么用的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-10 10:36:52 | 显示全部楼层
<<cout ???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-10 10:43:57 | 显示全部楼层
非主流代码看的蛋疼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 15:28:30 | 显示全部楼层
lx_Zz 发表于 2016-8-10 10:43
非主流代码看的蛋疼

这个还不算非主流吧,就是重载运算符而已
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 15:33:25 | 显示全部楼层
DarkSE 发表于 2016-8-10 09:35
错在你那个c,不要加括号
一开始看到

??可以说一下哪里吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-11 21:06:39 | 显示全部楼层
我是学C的,没见过你这种方式,不过大概意思我看明白了,我就想知道 你把OS里面赋值给a,b,c你定义这是啥类型,OS里面的东西不就是 一些字符串加一个int型的数嘛,你准备拿什么保存?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-12 08:09:03 | 显示全部楼层
1366627538 发表于 2016-8-11 21:06
我是学C的,没见过你这种方式,不过大概意思我看明白了,我就想知道 你把OS里面赋值给a,b,c你定义这是啥 ...

你理解错了,<<不是赋值,os是一个对象
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-12 09:38:49 | 显示全部楼层
DarkSE 发表于 2016-8-10 09:35
错在你那个c,不要加括号
一开始看到

看到了,声明变量那里。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-12 20:28:49 | 显示全部楼层

c++中<<这就叫数据流了吧,不是把OS里的东西给a,b,c的意思?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-13 22:18:05 | 显示全部楼层

这里重载了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-13 20:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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