加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么我们需要在重载>>和<<运算符时返回对ist

发布时间:2020-12-16 03:40:52 所属栏目:百科 来源:网络整理
导读:如果我不返回din或dout会发生什么,实际上我正在读一本书,其中作者返回流引用 istream operator(istream din,vector a){ for(int i=0;isize;i++) dina.v[i]; return din;}ostream operator(ostream dout,vector a){ dout"("a.v[0]; for(int i=1;isize;i++) do
如果我不返回din或dout会发生什么,实际上我正在读一本书,其中作者返回流引用
istream & operator>>(istream &din,vector &a)
{
    for(int i=0;i<size;i++)
    din>>a.v[i];
    return din;
}

ostream & operator<<(ostream &dout,vector &a)
{
    dout<<"("<<a.v[0];
    for(int i=1;i<size;i++)
    dout<<","<<a.v[i];
    dout<<")";
    return dout;
}

解决方法

原因是几个事实的组合.

>您希望能够像在中一样链接输入和输出操作

在>> x>> ?;

out<< z<< std :: precision(10)<< t<<的std :: ENDL; 所以你必须返回一些允许运算符<<再次.
>既然您希望运算符处理任何istream,即从std :: istream派生的任何对象,则无法定义

operator<<(istream_type,object); //按值获取istream 因为这只适用于特定的istream类型istream_type,但不适用于通用istream.为此,必须使用多态,即获取引用或指针(它将是一个引用或指向从std :: istream派生的类的指针).
>由于您只有对istream的引用,因此您无法返回istream对象本身(可能是在运算符<<的定义点上甚至没有定义的类型),而只返回您已获得的引用. 人们可以通过定义运算符<<来解决这个限制.一个模板并按值获取并返回istream_type,但这需要istream类型具有一个复制构造函数,它可能没有充分的理由.
>为了唤起多态性,原则上可以使用指针(对流)而不是引用.但是,运算符<<(stream *,const char *)是
C中不允许(至少有一个操作数必须是类或枚举类型).

因此,对于流指针,必须使用函数调用语法,然后使用C风格的fprintf(stream *,args …).

此外,指针可以为null或悬空,实际上它们是默认状态(在没有初始化程序时声明),而引用可以假定为有效(不能在没有初始化程序的情况下声明它).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读