为了账号安全,请及时绑定邮箱和手机立即绑定

这个+优先级不是大于<<吗这个为什么运行会出现错误

#include<iostream>
#include<stdlib.h>
using namespace std;
class Date{
    friend ostream &operator<<(ostream &output,Date &d);
public:
    Date(int y=2017,int m=5,int d=31){
        m_iY=y;
        m_iM=m;
        m_iD=d;
    }
    Date operator +(int num);
private:
    int m_iY,m_iM,m_iD;
};
ostream &operator<<(ostream &output,Date &d){
    output<<d.m_iY<<"-"<<d.m_iM<<"-"<<d.m_iD;
    return output;
}
Date Date::operator +(int num){
    Date d(*this);
    d.m_iD+=num;
    return d;
}

int main(){
    Date d;
    Date d1=d+1;
    cout<<d+1<<endl;
    system("pause");
    return 0;
}


正在回答

2 回答

返回值没错,是你的代码有问题

Date Date::operator +(int num)

{Date d(*this);(这一行代码已经生成了一个临时Date类的对象d,这导致你最后返回的时候是返回的输入时候的d,而不是计算后的d,所以程序计算顺序没有问题。

d.m_iD+=num;

return d;}

0 回复 有任何疑惑可以回复我~

+号优先级大于<<是没有错的,你可以注释掉  28行:Date d1=d+1;      ,结果仍为32日.

源程序之所以不输出33日是因为函数Date operator +(int num)内的 Date d(*this);     

d.m_iD+=num;是对一个新对象+1,并没有改变当前对象成员的值,可通过下边的修改证明:


Date Date::operator +(int num){

this->m_iD += num;

return *this;

}


最后结果会为 2017-5-33.


0 回复 有任何疑惑可以回复我~
#1

1629220008 提问者

这个其实我的问题是为什么得返回引用才能运行成功,opeartor+没用引用就运行失败了,这内存是释放掉了,还是找不到了?
2017-07-01 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之模板篇
  • 参与学习       91156    人
  • 解答问题       318    个

本C++教程力求即学即会,所有知识以实践方式讲解到操作层面

进入课程

这个+优先级不是大于<<吗这个为什么运行会出现错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信