iostrema 作为参数的用意是什么?

libinden71 2018-09-24 04:42:09
	

Person(std::iostream & is)
{
read(is, *this);
}

std::istream & Person::read(std::istream & is, Person &data)
{
is >> m_nSize;
return is;
}


不是很明白 为什么Person 类中要写一个Person(std::iostream & is) 把iostream作为参数的用意是什么?有什么作用?或者说为什么要这么做? 求大神解释下! 多谢!
...全文
362 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JonathanYan 2018-09-26
  • 打赏
  • 举报
回复
同意楼主,这段代码写的的确不合理,构造函数使得Person类和istream耦合严重。从类名称上看Person和istream没有必要的联系,一般交互发生在函数中比较好。
真相重于对错 2018-09-26
  • 打赏
  • 举报
回复
引用 5 楼 libinden71 的回复:
[quote=引用 1 楼 hdt 的回复:]
挺好理解的
iostream 是一个类负责输入输出,is是这个类型的具体对象,把一个具体对象传给函数,有什么不好理解的?

我能明白意思,但是不明白 为什么需要这样写!就算没有std::iostream & is 也能用函数将数据写入对象!那么这样写的用意是什么?麻烦大佬解释下!谢谢![/quote]
以前c没有class一样可以写程序,还有不用函数,直接一条条语句写下去,也可以写程序。为何要用class ,要用函数呢?

至于这段代码,它代表从一个输入输出流内读取数据,一个输入输出流底层可能会是不同介质。
如果不这么写,针对不同的介质,就要写不同的read,而且将来要扩展的话,比如一开始只考虑文件,将来通过网络呢?怎么办?
棉猴 2018-09-25
  • 打赏
  • 举报
回复
iostream不一定是是控制台的界面窗口,还有可能是文件(iofstream)或者字符串(iostringstream)
沐雨青城 2018-09-25
  • 打赏
  • 举报
回复
iostream表示输入输出流,指定数据的输入输出对象,可以为cin,cout,cerr标准输入,输出,错误输出流,也可以为文件。那个构造函数应该是为了从流中读取数据。后面那个函数功能看起来差不多,并且返回对象本身,应该是为了能够连续调用此函数。
libinden71 2018-09-25
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
挺好理解的
iostream 是一个类负责输入输出,is是这个类型的具体对象,把一个具体对象传给函数,有什么不好理解的?

我能明白意思,但是不明白 为什么需要这样写!就算没有std::iostream & is 也能用函数将数据写入对象!那么这样写的用意是什么?麻烦大佬解释下!谢谢!
libinden71 2018-09-25
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
挺好理解的
iostream 是一个类负责输入输出,is是这个类型的具体对象,把一个具体对象传给函数,有什么不好理解的?

我不明白的是 类内写一个这样的构造的意义是什么?如果没有这个会怎么样? 有又能起到什么效果? 麻烦大佬解释下!多谢!
赵4老师 2018-09-24
  • 打赏
  • 举报
回复
序列化反序列化
真相重于对错 2018-09-24
  • 打赏
  • 举报
回复
挺好理解的
iostream 是一个类负责输入输出,is是这个类型的具体对象,把一个具体对象传给函数,有什么不好理解的?

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧