c++输出重载和类型重载遇到的问题

C++语言 码拜 8年前 (2016-04-11) 897次浏览
定义了一个CDate的类,下面是本人的【后置++重载】【int类型转换重载】【输出重载】代码
CDate operator ++(int){
CDate tmp(*this);
day++;//成员变量++
return tmp;
}
operator int(){
int sum = 0;
代码省略
return sum;
}
ostream& operator<<(ostream&cout, CDate&d){
cout << d.year << d.month << d.day << endl;//代码作了省略
return cout;
}
上面两个重载代码就是为了匹配main函数下面的这两个输出,main函数是老师给定的,不能改。
CDate d;         //这里本人输入了2016/01/01    代码省略
cout << d++; 【第一行输出】
cout << d;      【第二行输出】
cout << (int)d;【第三行输出】
理论上会输出
2016/01/01
2016/01/02
2
但是,编译器中的实际输出是
12016/01/02
2
也就是说,【第一行中】cout<<d++变成了【cout<<(int)d; 】   【   d++】的效果
然后再执行【第二行】cout<<d; 输出2016/01/02
再执行【第三行】cout << (int)d;输出2
同学说,【第一行】中编译器作了一个隐式转换,为什么会这样?
解决方案

10

你这实现的貌似是前置++,而后置++没有实现,所以d++被默认转成int的d++.
后置++是CDate operator ++(){  },小括号里没有参数

20

ostream& operator<<(ostream&cout, CDate&d)

这里需要 const 以绑定右值

ostream& operator<<(ostream&cout, const CDate&d)

10

引用:
Quote: 引用:
ostream& operator<<(ostream&cout, CDate&d)

这里需要 const 以绑定右值

ostream& operator<<(ostream&cout, const CDate&d)

啊真的就成功了,为什么要绑定右值呢

CDate operator ++(int){
你的 operator ++ 返回了一个 临时对象CDate ,是一个右值


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c++输出重载和类型重载遇到的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)