C++重载++运算符的问题.
有哪位朋友可以帮我把这道题讲明白么,主要是重载++运算符的问题.#include<iostream>usingnamespacestd;classTime{public:...
有哪位朋友可以帮我把这道题讲明白么,主要是重载++运算符的问题.
#include <iostream>
using namespace std;
class Time
{public:
Time( ){minute=0;sec=0;}
Time(int m,int s):minute(m),sec(s){}
Time operator++( );
Time operator++(int);
void display( ){cout<<minute<<″:″<<sec<<endl;}
private:
int minute;
int sec;
};
Time Time∷operator++( )
{if(++sec>=60) //请问这里为什么不是sec++>=60?不是当sec=59的时候,++sec就是60了吗?然后59-60?
{sec-=60;
++minute;}
return *this;
}
Time Time∷operator++(int)
{Time temp(*this);//这里也没有搞明白,这个实参的作用?
sec++;
if(sec>=60)
{sec-=60;
++minute;}
return temp;
}
int main( )
{Time time1(34,59),time2;
cout<<″ time1 : ″;
time1.display( );
++time1;
cout<<″++time1: ″;
time1.display( );
time2=time1++;
cout<<″time1++: ″;
time1.display( );
cout<<″ time2 :″;
time2.display( );
}
运行结果如下:
time1 : 34:59 (time1原值)
++time1: 35:0 (执行++time1后time1的值)
time1++: 35:1 (再执行time1++后time1的值)
time2 : 35:0 (time2保存的是执行time1++前time1的值) 展开
#include <iostream>
using namespace std;
class Time
{public:
Time( ){minute=0;sec=0;}
Time(int m,int s):minute(m),sec(s){}
Time operator++( );
Time operator++(int);
void display( ){cout<<minute<<″:″<<sec<<endl;}
private:
int minute;
int sec;
};
Time Time∷operator++( )
{if(++sec>=60) //请问这里为什么不是sec++>=60?不是当sec=59的时候,++sec就是60了吗?然后59-60?
{sec-=60;
++minute;}
return *this;
}
Time Time∷operator++(int)
{Time temp(*this);//这里也没有搞明白,这个实参的作用?
sec++;
if(sec>=60)
{sec-=60;
++minute;}
return temp;
}
int main( )
{Time time1(34,59),time2;
cout<<″ time1 : ″;
time1.display( );
++time1;
cout<<″++time1: ″;
time1.display( );
time2=time1++;
cout<<″time1++: ″;
time1.display( );
cout<<″ time2 :″;
time2.display( );
}
运行结果如下:
time1 : 34:59 (time1原值)
++time1: 35:0 (执行++time1后time1的值)
time1++: 35:1 (再执行time1++后time1的值)
time2 : 35:0 (time2保存的是执行time1++前time1的值) 展开
2个回答
展开全部
只拿了你有疑问的两个函数出来讨论,看是否明白
Time Time::operator++( ) //这是前缀++,
{
if(++sec>=60) //当sec=59的时候,++sec,也就是说sec是60,然后60-60=0,不矛盾吧
{sec-=60;
++minute;}
return *this;
}
Time Time::operator++(int) //这是后缀++
{
Time temp(*this);//后缀就要多加一个变量,先保存原来的值,也就是*this,然后再对*this进行++,但返回的是++以前的*this
sec++;
if(sec>=60)
{sec-=60;
++minute;}
return temp;
}
Time Time::operator++( ) //这是前缀++,
{
if(++sec>=60) //当sec=59的时候,++sec,也就是说sec是60,然后60-60=0,不矛盾吧
{sec-=60;
++minute;}
return *this;
}
Time Time::operator++(int) //这是后缀++
{
Time temp(*this);//后缀就要多加一个变量,先保存原来的值,也就是*this,然后再对*this进行++,但返回的是++以前的*this
sec++;
if(sec>=60)
{sec-=60;
++minute;}
return temp;
}
追问
这里*this可以讲清楚点么,
追答
这个问题可以查查书,基础的都会介绍的。this其实就是指向当前的一个指针,*this就是取这个值。如类的一个对象obj,那么this就是指向这个对象的指针
展开全部
Time operator++( ); //这表示前++ 即:++time1 调用该函数
Time operator++(int); //这表示后++ 即:time1++调用的是该函数
C++语法就是这边规定的
if(++sec>=60) //请问这里为什么不是sec++>=60?不是当sec=59的时候,++sec就是60了吗?然后59-60?
因为时间秒的范围为:0-59,而不是1-60。也就是说:当sec为59时,下一秒就应该是0.
你用后++的话,if(sec++>=60)就为假,只有sec为60以后才为真:即sec这时范围是:1-60
Time temp(*this);//这里也没有搞明白,这个实参的作用?
这句就定义temp对象为当前对象的一个副本呗
Time operator++(int); //这表示后++ 即:time1++调用的是该函数
C++语法就是这边规定的
if(++sec>=60) //请问这里为什么不是sec++>=60?不是当sec=59的时候,++sec就是60了吗?然后59-60?
因为时间秒的范围为:0-59,而不是1-60。也就是说:当sec为59时,下一秒就应该是0.
你用后++的话,if(sec++>=60)就为假,只有sec为60以后才为真:即sec这时范围是:1-60
Time temp(*this);//这里也没有搞明白,这个实参的作用?
这句就定义temp对象为当前对象的一个副本呗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询