C++ 运算符重载问题,帮帮忙吧
// 实验11第2题目.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h "
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
class ctime
{
int houre;
int minue;
int secon;
public:
ctime(int a,int b,int c)
{houre=a;
minue=b;
secon=c;
}
void display()
{cout < <houre < < ": " < <minue < < ": " < <secon < < ": " < <endl;
}
void sethoure(int houres)
{houre=houres;}
void setminue(int minues)
{minue=minues;}
void setsecon(int secons)
{secon=secons;}
friend ostream &operator < <(ostream&out,ctime&c)
{out < <c.houre < < ": " < <c.minue < < ": " < <c.secon < < ": " < <endl;
return out;}
ctime operator ++(int)
{if(++secon> =60)
{if(++minue> =60)
return ctime(houre+1,minue-60,secon-60);
else
return
ctime(houre,minue,secon-60);}
else
return ctime(houre,minue,secon);
}
};
int main()
{int a,b,c,d;
cout < < "输入初始时间 " < <endl;
cin> > a> > b> > c;
ctime time(a,b,c);
for(d=0;d <=60;d++)
{time++;
cout < <time;}
return 0;
}
问题是 模拟时钟走动,上面这个程序当秒跑到60以上能执行分针加1,但是秒针却不能减60;为什么?同样分针跑到60以上,能执行时针加1,分针却不能减60;谁明白讲解下。而先面的程序:
/ 实验11第2题目.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h "
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
class ctime
{
int houre;
int minue;
int secon;
public:
ctime(int a,int b,int c)
{houre=a;
minue=b;
secon=c;
}
void display()
{cout < <houre < < ": " < <minue < < ": " < <secon < < ": " < <endl;
}
void sethoure(int houres)
{houre=houres;}
void setminue(int minues)
{minue=minues;}
void setsecon(int secons)
{secon=secons;}
friend ostream &operator < <(ostream&out,ctime&c)
{out < <c.houre < < ": " < <c.minue < < ": " < <c.secon < < ": " < <endl;
return out;}
ctime operator ++(int)
{if(++secon> =60)
{if(++minue> =60)
{ houre+=1;
minue-=60;
secon-=60;
return ctime(houre,minue,secon);}
else secon-=60;
return
ctime(houre,minue,secon);}
else
return ctime(houre,minue,secon);
}
};
int main()
{int a,b,c,d;
cout < < "输入初始时间 " < <endl;
cin> > a> > b> > c;
ctime time(a,b,c);
for(d=0;d <=60;d++)
{time++;
cout < <time;}
return 0;
}却能达到目的?
[解决办法]
class Ctime
{
int houre;
int minue;
int secon;
public:
Ctime(int a,int b,int c)
{
houre=a;
minue=b;
secon=c;
}
void display()
{
cout < <houre < < ": " < <minue < < ": " < <secon < < ": " < <endl;
}
void sethoure(int houres)
{
houre=houres;
}
void setminue(int minues)
{
minue=minues;
}
void setsecon(int secons)
{
secon=secons;
}
friend ostream &operator < <(ostream&out,Ctime&c)
{
out < <c.houre < < ": " < <c.minue < < ": " < <c.secon < < ": " < <endl;
return out;
}
Ctime operator ++(int)
{
secon++;
if( secon> =60){
secon=0;
minue++;
}
if(minue> =60){
minue=0;
houre++;
}
return (*this);
}
};
int main(int ,char* [])
{
int a,b,c,d;
cout < < "输入初始时间 " < <endl;
cin> > a> > b> > c;
Ctime t(a,b,c);
for(d=0;d <=60;d++)
{
t++;
cout < <t;
}
return 0;
}
[解决办法]
可能和你的编译器有关。
大家说的你的代码很乱,是因为你写的代码把很多东西都放在一起处理,这样出问题时不好调试,代码的可读性也差